我在我的測試套件的測試,是這樣的:在xUnit中驗證集合大小的慣用方法是什麼?
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
這個測試工作如我所料,但是當我運行它的xUnit打印警告:
警告xUnit2013:做不要使用Assert.Equal()來檢查集合的大小。
但是,在警告中沒有提供替代方法,並且Google搜索將我帶到xUnit中的源代碼中進行測試,驗證是否打印此警告。如果Assert.Equal()
不是驗證集合長度的正確方法,那麼是什麼?
澄清:我意識到我可以「欺騙」xUnit,使其不會發出此警告。取出一個變量或使用Assert.True(stuff.Count() == 1)
代替。後者只是黑客,而前者感覺就像xUnit是例如試圖避免一個IEnumerable<T>
的多次迭代,那麼這是一個錯誤的路要走(因爲如果它是一個問題,我會分別得到關於它的編譯器提示),並且xUnit本身不應該多次評估輸入(在事實上它可能會得到相同的輸入,無論變量提取如何,因爲C#函數調用的工作方式)。
所以,我不只是有興趣從我的輸出中刪除該警告。我的問題的答案也解釋了爲什麼那個警告是包含在庫中的第一位,而爲什麼我應該使用什麼方法反而更好。
如果將'stuffCollection.Count()'存儲在一個單獨的變量中,並將它傳遞給斷言,是否會給出相同的錯誤? – hellyale
也許[this one](https://stackoverflow.com/a/30815958/107625)? –