Bagaimana cara menjalankan test case dalam file yang ditentukan?

205

Paket uji paket saya tersebar di beberapa file, jika saya menjalankannya go test <package_name>menjalankan semua kotak uji dalam paket.

Tidak perlu menjalankan semuanya. Apakah ada cara untuk menentukan file untuk go testdijalankan, sehingga hanya menjalankan kasus uji yang ditentukan dalam file?


sumber

Jawaban:

326

Ada dua cara. Yang mudah adalah dengan menggunakan -runbendera dan memberikan nama yang cocok dengan pola tes yang ingin Anda jalankan.

Contoh:

$ go test -run NameOfTest

Lihat dokumen untuk info lebih lanjut.

Cara lain adalah memberi nama file tertentu, yang berisi tes yang ingin Anda jalankan:

$ go test foo_test.go

Tapi ada tangkapan. Ini bekerja dengan baik jika:

  • foo.goadalah di package foo.
  • foo_test.goada di package foo_testdan impor 'foo'.

Jika foo_test.godan foo.gomerupakan paket yang sama (kasus umum) maka Anda harus memberi nama semua file lain yang diperlukan untuk dibuat foo_test. Dalam contoh ini akan menjadi:

$ go test foo_test.go foo.go

Saya akan merekomendasikan untuk menggunakan -runpolanya. Atau, jika memungkinkan, selalu jalankan semua tes paket.

zzzz
sumber
1
maukah Anda menguraikan cara (mudah) pertama dengan -runmenyenangkan? Saya tidak dapat menemukan referensi manual tentang itu.
1
Anda juga dapat menemukan info tentang itu dengango help testflag
Jeffrey Martinez
Ketika saya menggunakan perintah go test utils.go utils_test.go, outputnya adalah ok command-line-arguments 0.002s. Itu tidak menjalankan tes. Alasan saya ingin menggunakan mode tes ini adalah karena paket berisi banyak file dan mereka belum mengkompilasi kecuali utils. Jadi saya ingin menyelesaikan utils sebelum workinqg pada file lain. Bagaimana saya bisa melakukan itu?
chmike
Jika Anda ingin melihat apa yang dicatat saat pengujian, perlu disebutkan -vflag (verbose). Dari docs-v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds.
robstarbuck
121

Jawaban @ zzzz sebagian besar sudah selesai, tetapi hanya untuk menyelamatkan orang lain dari tidak harus menggali melalui dokumentasi yang direferensikan Anda dapat menjalankan tes tunggal dalam sebuah paket sebagai berikut:

go test packageName -run TestName

Perhatikan bahwa Anda ingin memberikan nama tes, bukan nama file tempat tes tersebut dilakukan.

The -runflag benar-benar menerima regex sehingga Anda bisa membatasi uji coba untuk kelas tes. Dari dokumen:

-run regexp
    Run only those tests and examples matching the regular
    expression.
TomDotTom
sumber
28
Perlu dicatat bahwa nama paket adalah nama paket lengkap, mis. "Github.com/you/stuff/a/b/c"
garbagecollector
1.9.3 menerima jalur relatif paket juga.
2
Tidak yakin mengapa, tetapi untuk beberapa alasan, saya harus menentukan "./" sebelum nama paket
Roozbeh Zabihollahi
12

Saat menjalankan tes tunggal biasanya saya lakukan:

go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1

-count 1juga memastikan bahwa tes dijalankan setiap kali alih-alih di-cache. Berguna saat Anda menguji kondisi ras dan memiliki tes yang kadang-kadang gagal. Dalam versi Go tidak menggunakan modul yang sama dapat dicapai dengan pengaturan GOCACHE=offtetapi ini berinteraksi buruk dengan modul Go.

Francesco Casula
sumber
6

di intelliJ IDEA go-lang plugin (dan saya asumsikan dalam jetbrains Gogland) Anda bisa mengatur jenis tes ke file yang sedang berjalan> edit konfigurasi

tangkapan layar buat uji coba di file go

raja robert
sumber
2
Di Gogland Anda cukup mengklik kanan pada file tes dan memilih "run foo_test.go" itu akan membangun paket dengan tes dan kemudian meneruskan regex yang berisi nama-nama semua tes dalam file tes ke-run flag. Fitur yang sangat berguna.
Eloff
4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)
pengguna2865442
sumber
2
go test -v ./<package_name> -run Test

Mencegah caching hasil tes.

go test -count=1 ./<package_name> -run Test
Dele
sumber
0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFunc harus ada di dalam gofile uji dalam paket itu
  • Kami dapat memberikan ekspresi reguler untuk mencocokkan satu set kasus uji atau hanya fungsi kasus uji yang tepat untuk menjalankan satu kasus uji. Misalnya-run TestCaseFunc
Abhishek Srivastava
sumber