Bunun gibi ertelenmiş iddialar eklemek uygun mudur [..]
Hayır , değil. Neden? Çünkü herhangi bir nedenden dolayı ikinci savunmayı kaldırırsanız test yine de yeşile dönecektir ve hala işe yaradığını düşünürsünüz, ancak koleksiyon numaralandırılmayacağından böyle olmaz. İki veya daha fazla bağımsız iddianız varsa, bunlardan birini devre dışı bıraksanız bile işlerini yapmaya devam ederler.
Bu kombinasyonu düşünün:
Assert.IsTrue(actualKittens.All(x => x.IsCute());
CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList());
Şimdi, eklerden birini devre dışı bıraksanız veya kaldırsanız bile diğeri işini yine de yapar. Ayrıca koleksiyonu gerçekleştirmeyi unutursanız , çalıştırılması daha uzun sürebilir, ancak yine de çalışacaktır. Bağımsız testler daha sağlam ve güvenilirdir.
Ayrıca ikinci bir hayır var . Diğer çerçevelerin nasıl işlediğinden emin değilim ama MS Test platformunu kullanıyorsanız hangi testin başarısız olduğunu bilemezsiniz. Başarısız olan testi çift tıklatırsanız, başarısız olduğunu gösterir CollectionAssert
ancak gerçekte Assert
yanlış giden iç içe geçmişti ve hata ayıklamak son derece zor olacaktır. İşte bir örnek:
[TestMethod]
public void TestMethod()
{
var numbers = new[] { 1, 2, 3 }.Select(x =>
{
Assert.Fail("Wrong number.");
return x;
});
// This will fail and you won't be sure why.
CollectionAssert.AreEqual(new[] { 1, 2, 3 }, numbers.ToList());
}
Bu, ilk testin aslında işe yaramaz olduğu anlamına gelir, çünkü bir hata bulmaya yardımcı olmaz. Bir sayının geçersiz olması veya her iki koleksiyonun farklı olması nedeniyle başarısız olup olmadığını bilmiyorsunuz.
Neden? Böylece, somutlaşmış toplama bekleyen ifadelerle bile sadece bir kez yineleyebilirim
Acaba neden umursuyorsun? Bunlar birim testlerdir. Bunların her bir parçasını optimize etmek zorunda değilsiniz ve genellikle testler milyonlarca öğe gerektirmez, bu nedenle performans bir endişe olmamalıdır.
Bu tür testleri sürdürmeniz gerekecek, bu yüzden onları neden gerektiğinden daha karmaşık hale getirmelisiniz? Çalışan basit ekler yazın.
sequence.WithSideEffect(item => Assert.IsCute(item))
daha temiz hale getirmek için kendinize yardımcı bir işlev yapabilirsiniz.