Test süitimde şuna benzer bir test var:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Bu test beklediğim gibi çalışıyor, ancak çalıştırdığımda xUnit bir uyarı veriyor:
uyarı xUnit2013: Koleksiyon boyutunu kontrol etmek için Assert.Equal () kullanmayın.
Ancak uyarıda herhangi bir alternatif önerilmiyor ve bir google araması beni bu uyarının yazdırıldığını doğrulayan test için xUnit'teki kaynak koduna götürüyor.
Eğer Assert.Equal()
bir koleksiyon uzunluğunu doğrulamak için doğru bir yol değildir, nedir?
Açıklığa kavuşturmak için: xUnit'i bu uyarıyı yaymaması için örneğin bir değişkeni çıkararak veya Assert.True(stuff.Count() == 1)
onun yerine kullanarak kandırabileceğimi fark ettim . İkincisi sadece hilekar ve ilki, xUnit örneğin birden fazla yinelemeden kaçınmaya çalışıyormuş gibi hissediyor IEnumerable<T>
, o zaman bu yanlış bir yoldur (çünkü bir sorunsa bununla ilgili derleyici ipuçlarını ayrıca alacağım) ve xUnit kendisi hiçbir zaman girdiyi birden fazla değerlendirmek zorunda kalmamalıdır (aslında, C # işlev çağrısının nasıl çalıştığından dolayı, değişken çıkarımdan bağımsız olarak muhtemelen aynı girdiyi alacaktır).
Yani, sadece bu uyarıyı çıktımdan kaldırmakla ilgilenmiyorum. Sorumun cevabı aynı zamanda bu uyarının neden ilk etapta kütüphaneye dahil edildiğini ve bunun yerine hangi yaklaşımı kullanmam gerektiğini neden daha iyi açıklıyor .
stuffCollection.Count()
ayrı bir değişkende depolar ve bunu assert'e iletirseniz size aynı hatayı verir mi?