我的测试套件中有一个测试是这样的:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
该测试按我的预期工作,但是当我运行它时,xUnit会显示警告:
警告xUnit2013:请勿使用Assert.Equal()检查集合大小。
但是,警告中没有其他建议,谷歌搜索将我带到xUnit中的源代码以进行验证此警告的测试打印。
如果Assert.Equal()
不是验证集合长度的正确方法,那是什么?
需要澄清的是:我意识到我可以“诱骗” xUnit,使其不发出警告,例如提取变量或使用它Assert.True(stuff.Count() == 1)
。后者只是骇人听闻的,而前者的感觉就像是如果xUnit例如试图避免的多次迭代IEnumerable<T>
,那么这是错误的方法(因为如果遇到问题,我将分别获得编译器的提示)和xUnit本身永远不必对输入进行多次评估(实际上,由于C#函数调用的工作原理,无论变量提取如何,它都将获得相同的输入)。
因此,我不仅对从输出中删除该警告感兴趣。我的问题的答案还解释了为什么该警告首先包含在库中,以及为什么我应该改用任何方法更好。
stuffCollection.Count()
在单独的变量中并将其传递给断言,是否会给您同样的错误?