Catch

2016-04-06 17 views
0

'u kullanarak test durumlarının kombinatoryal patlamasını içermek üzere, kurucusunda 6 tane boolean argümanını alan basit bir sınıfa sahip olduğumuzu ve bu argümanların durumuna dayalı bir hesaplama gerçekleştirdiğimizi varsayalım.Catch

Tüm vakaları yeterince test etmek için Catch kullanmak istiyorsam, 64 ayrı ünite testine ihtiyacım var.

Şimdi, gelecekteki bir noktada, 7. bir boole argümanı ekleyelim. Şimdi yazmam gereken test vakalarının sayısı iki katına çıkmıştır. 128.

Ünite testimi, tüm 2^n test örneklerini otomatik olarak "üretecek" şekilde üretebileceğim bir yol var mı? Tek test şartnamesi?

cevap

1

Otomatik olarak işlev alır bool değerlerden oluşan tüm farklı kombinasyonlar yürümeye Catch generators bölümünü kullanabilirsiniz:

TEST_CASE("where is my sandwich", "[hunger][food]") 
{ 
    bool wantLettuce = GENERATE(Values(false, true)); 
    bool wantTomato = GENERATE(Values(false, true)); 
    bool wantBacon = GENERATE(Values(false, true)); 
    bool wantCheese = GENERATE(Values(false, true)); 
    bool wantEgg = GENERATE(Values(false, true)); 

    CHECK(sandwichAssembler(wantLettuce, wantTomato, wantBacon, wantCheese, wantEgg)); 
} 

IIRC bu Yakalama tüm kombinasyonları deneyerek 2^5 kez çalışmasına neden olur.

... ama tüm yapmak istediğiniz tüm kombinasyonları egzersiz olduğunu varsayarak varsayalım. Çıktının gerçekten doğru olmasını istiyorsanız, her durumda bazı beklentileri karşılıyorsanız, daha fazlasını yapmanız gerekecektir.

(Bunu test etmedim - Barselona'da bir kafede sandviçimi beklerken hafızadan hatırlatma)