Tek bir test birden fazla koşul iddia veya çoklu testler bölünür?

5 Cevap php

Eğer aşağıdaki gibi bir sayım fonksiyonunu test olsaydı, bu testlerin her biri için bir test işlevi olan vs bir işlev fonksiyon için birden şeyleri test etmek için 'doğru' veya 'yanlış' olarak kabul edilir?

    function testGetKeywordCount()
    {
        $tester = $this->getDatabaseTester($this->CompleteDataFile);

        $tester->onSetUp();

        $KeywordID = 0;

        $this->setExpectedException('InvalidArgumentException');
        $this->keyword->getKeywordCount($KeywordID,'Active');

        $KeywordID = 1;

        $this->setExpectedException('InvalidArgumentException');
        $this->keyword->getKeywordCount($KeywordID,'InvalidStatus');

        $this->assertEquals(1, $this->keyword->getKeywordCount($KeywordID,'Active'));

        $tester->onTearDown();
    }

5 Cevap

Her kendi durumunu test çoklu test fonksiyonları olmalıdır. Bu şekilde hata ayıklama olmadan bir başarısızlık noktaya daha kolaydır.

Her senaryo için bir test durumda olması idealdir. Ancak, bazı durumlarda bir test durumda birden fazla senaryoyu test etmek (bakış uygulama çabası açısından verimli) daha uygundur. Eğer ilk başarısızlık durdurmak, ancak bir test durumda mümkün olduğunca yürütmek çalışırsa bir çerçeve kullanıyorsanız, bu çerçeve test durumda başına birden senaryoları için uygundur.

Ben birim test mümkün olduğunca az zaman harcamak, ve yine bu süre içinde mümkün olduğunca en kapsama olarak almayı tercih etmektedirler.

Sonunda, bu birim test uygulamak nasıl daha az önemli, ancak bu testlerin daha doğruluğu.

Test çerçeveler her zaman testi kural başına bir iddiayı takip etmek için çaba değer yapmazlar.

Yok bir RSpec Eğer nested example groups kurmanızı sağlar Ruby içindir. Örneğin:

  • A User
    • without a password
      • geçersiz
      • istisna atar
    • with a password
      • that has been used before
        • geçersiz
        • istisna atar
        • güvenlik uyarısı gezileri
      • that hasn't been used before
        • geçerlidir
        • Sayfayı hesap yönlendirir

Giderek senaryoları kadar bina ve yol boyunca her adımı test ederek, en kolay testi yaklaşımı başına bir iddiasının sopa. Ayrıca, daha kolay denenmemiş senaryoları görmenizi sağlar.

Iki ayrı testlerin içine onaylamaları bölme için bir argüman iddiaların biri başarısız olursa, bir başarısızlık alırsınız, yani; Her iki iddialar başarısız olursa, iki hataları alırsınız.

Bir şey kırıldığında da, mümkün olduğu kadar düşündüren her testin adını yaparak, ekstra ipuçları elde edeceksiniz.

I would not talk about Unit tests in your example code above.
Your example is more an automated functional test, that tests a flow of functions.

BUT In this case it is fine to have multiple assertions.

Just make sure that 2 assertions are not one behind the other.

Kötü örnek

public void ValidateRulesEntry_Valid_ValidConditionsFromFile()
{
    string condition = "Target.HasValue";
    string returnMessage;

    bool successFul = CodeParserTryParseCondition(condition, out returnMessage);


    Assert.IsTrue(successFul);
    Assert.IsFalse(string.IsNullOrEmpty(returnMessage));
    Assert.IsTrue(returnMessage == "OK");

}

2 son iddialar 1 iddiasının IsTrue (Başarılı) bağımlı olan.

Düşünün: bu test başarısız olursa -> neden (Ayıkla çıkışı içine bakmadan) söyle