我在我的测试套件的测试,是这样的:在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)? –