Bagaimana saya dapat melakukan pemrosesan pengaturan pengujian secara keseluruhan yang menetapkan tahapan untuk semua pengujian saat menggunakan paket pengujian ?
Sebagai contoh di Nunit ada [SetUp]
atribut.
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* Load test data */ }
}
unit-testing
go
miltonb
sumber
sumber
Jawaban:
Dimulai dengan Go 1.4 Anda dapat mengimplementasikan pengaturan / pembongkaran (tidak perlu menyalin fungsi Anda sebelum / setelah setiap pengujian). Dokumentasi diuraikan di sini di bagian Utama :
Butuh beberapa saat bagi saya untuk mengetahui bahwa ini berarti jika pengujian berisi fungsi
func TestMain(m *testing.M)
maka fungsi ini akan dipanggil alih-alih menjalankan pengujian. Dan dalam fungsi ini saya dapat menentukan bagaimana tes akan berjalan. Misalnya saya dapat mengimplementasikan pengaturan global dan pembongkaran:Beberapa contoh lainnya dapat ditemukan di sini .
sumber
TestMain
adalah satu kali dalam satu paket, jadi tidak terlalu berguna. Saya menemukan subtes lebih baik untuk tujuan yang lebih kompleks.lstat $GOROOT/subtests: no such file or directory
Ini dapat dicapai dengan meletakkan
init()
fungsi di_test.go
file. Ini akan dijalankan sebeluminit()
fungsi._Test.init () akan dipanggil sebelum fungsi package init ().
sumber
[TestFixtureSetUp]
atribut NUnit sebagai gantinya.Diberikan fungsi sederhana untuk pengujian unit:
Anda dapat mengujinya dengan fungsi pengaturan yang mengembalikan fungsi pembongkaran. Dan setelah memanggil setup () Anda dapat melakukan panggilan yang ditangguhkan ke teardown ().
Alat pengujian Go akan melaporkan pernyataan logging di konsol shell:
Anda dapat meneruskan beberapa parameter tambahan ke penyiapan / pembongkaran dengan pendekatan ini.
sumber
Biasanya, pengujian dalam go tidak ditulis dalam gaya yang sama seperti bahasa lain. Seringkali, ada fungsi pengujian yang relatif lebih sedikit, tetapi masing-masing berisi sekumpulan kasus pengujian berdasarkan tabel. Lihat artikel ini yang ditulis oleh salah satu tim Go.
Dengan pengujian berbasis tabel, Anda cukup meletakkan kode penyiapan apa pun sebelum loop yang menjalankan kasus uji individual yang ditentukan dalam tabel, dan meletakkan kode pembersihan apa pun setelahnya.
Jika Anda masih memiliki kode penyiapan yang dibagikan di antara fungsi pengujian, Anda dapat mengekstrak kode penyiapan bersama ke dalam suatu fungsi, dan menggunakan a
sync.Once
jika penting agar dijalankan tepat satu kali (atau seperti yang disarankan oleh jawaban lain, gunakaninit()
, tetapi ini memiliki kerugian bahwa penyiapan akan dilakukan meskipun kasus pengujian tidak berjalan (mungkin karena Anda telah membatasi kasus pengujian dengan menggunakango test -run <regexp>
.)Saya akan mengatakan jika Anda berpikir Anda memerlukan pengaturan bersama antara pengujian berbeda yang dijalankan tepat setelah Anda harus berpikir jika Anda benar-benar membutuhkannya, dan jika pengujian berbasis tabel tidak akan lebih baik.
sumber
Kerangka pengujian Go tidak memiliki apa pun yang setara dengan atribut SetUp NUnit (menandai fungsi yang akan dipanggil sebelum setiap pengujian di suite). Ada beberapa opsi:
Cukup panggil
SetUp
fungsi Anda dari setiap pengujian jika diperlukan.Gunakan ekstensi untuk kerangka pengujian Go yang mengimplementasikan paradigma dan konsep xUnit. Tiga opsi kuat muncul di benak:
Masing-masing pustaka ini mendorong Anda untuk mengatur pengujian Anda ke dalam suite / perlengkapan yang mirip dengan kerangka kerja xUnit lainnya, dan akan memanggil metode penyiapan pada tipe suite / perlengkapan sebelum masing-masing
Test*
metode.sumber
Steker tak tahu malu, saya membuat https://github.com/houqp/gtest untuk membantu menyelesaikan masalah ini dengan tepat.
Berikut ini contoh singkatnya:
Anda dapat membuat grup uji apa pun yang Anda inginkan dalam sebuah paket dengan masing-masing grup tersebut menggunakan rangkaian rutinitas penyiapan / pembongkaran yang berbeda.
sumber