最佳答案
我在我的测试套件中有一个类似这样的测试:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
这个测试正如我所期望的那样工作,但是当我运行它时,xUnit 会打印一个警告:
警告 xUnit2013: 不要使用 Assert.equals ()检查集合大小。
但是,在这个警告中没有其他建议,并且 google 搜索会将我带到 xUnit 中的源代码,以进行验证打印这个警告的测试。
如果 Assert.Equal()
不是验证集合长度的正确方法,那么什么才是?
澄清一下: 我意识到我可以通过提取一个变量或者使用 Assert.True(stuff.Count() == 1)
来“欺骗”xUnit 不发出这个警告。后者就显得有些古怪了,前者让人觉得如果 xUnit 试图避免 IEnumerable<T>
的多次迭代,那么这就是错误的做法(因为如果这是一个问题,我将单独得到编译器提示) ,而且 xUnit 本身不应该不止一次地求值输入(事实上,由于 C # 函数调用的工作方式,不管变量提取如何,它可能都会得到相同的输入)。
所以,我不仅仅对从输出中删除该警告感兴趣。对我的问题的一个回答也解释了 为什么,首先在库中包含警告,而 为什么无论我应该使用什么方法都是更好的。