Test senaryoları belirli bir dosyada nasıl çalıştırılır?


208

Paket test durumlarım birden fazla dosyaya dağılmış durumda, çalıştırırsam go test <package_name>paketteki tüm test senaryolarını çalıştırır .

Ancak hepsini çalıştırmak gereksizdir. go testÇalıştırılacak dosyayı belirtmenin bir yolu var mı , böylece yalnızca dosyada tanımlanan test senaryolarını çalıştırıyor mu?

go 

Yanıtlar:


333

İki yol var. Kolay olan, -runbayrağı kullanmak ve çalıştırmak istediğiniz testlerin adlarıyla eşleşen bir desen sağlamaktır.

Misal:

$ go test -run NameOfTest

Daha fazla bilgi için dokümanlara bakın .

Diğer yol, çalıştırmak istediğiniz testleri içeren belirli bir dosyayı adlandırmaktır:

$ go test foo_test.go

Ama bir sorun var. Bu şu durumlarda işe yarar:

  • foo.goiçinde package foo.
  • foo_test.goiçindedir package foo_testve İthalattaki foo '.

Eğer foo_test.gove foo.goaynı paket (ortak vaka) o zaman bir yapı için gerekli olan tüm diğer dosyaları ad vermelisiniz foo_test. Bu örnekte şöyle olur:

$ go test foo_test.go foo.go

-runDeseni kullanmanızı tavsiye ederim . Veya mümkünse / mümkün olduğunda her zaman tüm paket testlerini yapın.


1
-runLütfen ilk (kolay) yolu ayrıntılı olarak açıklar mısınız? Bu konuda herhangi bir manuel referans bulamıyorum.

1
Ayrıca bu konuda bilgi bulabilirsinizgo help testflag
Jeffrey Martinez

Komutu go test utils.go utils_test.gokullandığımda çıktı ok command-line-arguments 0.002s. Testi yapmaz. Bu test modunu kullanmak istememin nedeni, paketin çok sayıda dosya içermesi ve henüz araçlar dışında derlenmemesidir. Bu yüzden diğer dosyalarda workinqg önce utils sonlandırmak istiyorum. Bunu nasıl yapabilirim ?
chmike

Test sırasında nelerin günlüğe kaydedildiğini görmek istiyorsanız -v(ayrıntılı) bayrağa değinmeye değer . Belgelerden-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

122

@ zzzz'nin cevabı çoğunlukla tamamlanmıştır, ancak başkalarının referans verilen belgeleri incelemek zorunda kalmamak için aşağıdaki gibi bir pakette tek bir test çalıştırabilirsiniz:

go test packageName -run TestName

Testin bulunduğu dosya adını değil , testin adını iletmek istediğinizi unutmayın .

-runEğer testler sınıfa deneme sınırlamak böylece bayrak aslında bir düzenli ifade kabul eder. Dokümanlardan:

-run regexp
    Run only those tests and examples matching the regular
    expression.

28
Bu paket adını dikkati çekiyor komple paket adı, örneğin, "github.com/you/stuff/a/b/c" dır
garbagecollector

1.9.3 paketin göreli yolunu da kabul eder.

2
Neden olduğundan emin değilim, ama nedense, paket adından önce "./" belirtmeliyim
Roozbeh Zabihollahi

12

Tek bir test çalıştırırken genellikle şunları yaparım:

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

-count 1ayrıca testin önbelleğe alınmak yerine her seferinde yapılmasını sağlar. Yarış koşullarına karşı test yaparken ve sadece bazen başarısız olan bir testiniz olduğunda kullanışlıdır. Modülleri kullanmayan Go sürümlerinde aynı şey ayarlanarak elde edilebilir, GOCACHE=offancak bu Go modülleriyle zayıf etkileşime girer.


6

intelliJ IDEA go-lang eklentisinde (ve ben jetbrains Gogland'da varsayalım) sadece test türünü run> dosya konfigürasyonları altında dosyaya ayarlayabilirsiniz

ekran görüntüsü go dosya üzerinde test oluşturmak


2
Gogland'da sadece test dosyasına sağ tıklayıp "run foo_test.go" komutunu seçerek paketi testlerle oluşturacak ve daha sonra bu test dosyasındaki tüm testlerin adlarını içeren bir normal ifadeyi -run bayrağına aktarabilirsiniz. Gerçekten kullanışlı bir özellik.
Eloff

4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)

2
go test -v ./<package_name> -run Test

Test sonuçlarının önbelleğe alınmasını önler.

go test -count=1 ./<package_name> -run Test

0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFunc go, bu paketteki bir test dosyasının içinde olmalıdır
  • Bir test senaryosunu eşleştirmek için düzenli bir ifade veya tek bir test senaryosunu çalıştırmak için tam test senaryosu işlevini sağlayabiliriz. Örneğin-run TestCaseFunc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.