2014-07-08 11 views
28

Gitmeden önce "gönderilmemiş (özel) işlevler için birim testi oluşturmayla ilgileniyordum." Ancak, temel olarak testler için bunları oluşturmak gerçekten zor, çünkü onları "kamuya" yapmak zorundayım. Sonunda, onların özel olmasının bütün noktasını yener. Asıl önemli olan bu yardımcı fonksiyonun modüler hale gelmesine yardımcı olması ve şimdi modüler olmaları, test paketi dışında herkes için kullanılabilir hale getirilmeden ünite testleri yapabilmeleri, güzel olması gereken fonksiyonlar olmaması veya Test takımı veya gerçek paketin kendisi dışında herkes tarafından kullanılır.Giden (özel) bir işlev go (golang) içinde nasıl test edilir?

Herhangi bir öneriniz var mı? sadece kendi paketine ve 1 ek pakete veya bu türden bir şeye göre dışa aktarılabilir mi?

cevap

35

,

+0

Ancak bu, tüm birim testlerimin 'test' paketi altında olmadığı anlamına gelir, değil mi? Test dizinindeki test testi artık kitaplığımın tam bir testini vermeyecek, değil mi? –

+6

@CharlieParker - Evet, ancak bu Go standarttır. Bir paket içinde _test dosyalarını ve non-_test dosyalarını karıştırır ve bazı/path/packagename, bazı/path/packagename/test veya bazı/path/tests/packagename değil. – twotwotwo

+2

@twotwowo yeterince adil. Ancak, her gitmek gitmek için her dir gitmek zorunda can sıkıcı. Testlerin tümünü ** bir tür komut veya bir Make dosyası veya bu tür bir şey aracılığıyla çalıştırmak mümkün mü? –

3

İlk özel yapı ile Testleri çalışacak

package mypkg 

func TestPrivateStruct(t *testing.T){ 
    pf := private{ "Private Field" } 
    .... 
} 

package mypkg 

type private struct { 
    privateField string 
} 

go test mypkg -v

library.go library_test.go paketin

içinde bir test dosyası oluşturmak y ile aynı konumda iki tür test yapabilirsiniz. paketimiz iç testler için paket ismini kullanarak (ör. mypkg) ve "harici" testler için eklenmiş olan "_test" ile aynı paket adını kullanarak (örn. mypkg_test). Her iki tür testin adı "_test.go" ile biten dosyalarda olmalıdır.

ANCAK, tüm birim testleri, "dış arabirimi" (yani genel işlevleri) paketinize test etmektir. Bu birim testleri her zaman "beyaz kutu" testleri olmalıdır (bkz. White Box Testing). Bu şekilde kodunuzu yeniden düzenleyebilir ve testleriniz kırılmaz.

Elbette, bazen "dış arabirim" üzerinden mümkün olmayan iç tutarlılığı kontrol etmek istersiniz. Bunun için çok değerli iddiaları buldum. Diğer bir olasılık ise, normal kullanım için olmadıklarını belirten adlarla ortak "teşhis" işlevlerini eklemektir.

+0

, normal kullanım için olmadıklarını belirten adlar --- --- bu noktada, yalnızca birim testlerinizden internallere erişiyorsunuz, ancak arayanlardan önyüklemesine erişilebilen bir dolaylılık katmanı aracılığıyla. Bunu yaparsanız, 'salt harici' bir sınama işareti, amacınız için kesmez. Bir maça da kürek çağırabilir ve içeri girebilir. – hraban

+1

birim testleri sadece * public * işlevleri için değildir. Genel bir arayüz, özel işlevlerin kombinasyonlarından kaynaklanan sayısız farklı beklentilerle sonuçlanabilir.Daha küçük tek amaçlı işlevler için bir birim testine sahip olmak çok daha kolay ve güvenlidir. Hala herkese açık olanları test etmek istiyorsun. –