c# - CollectionAssert.Contains(myList, myItem) != Assert.IsTrue(myList.Contains(myItem))

标签 c# .net unit-testing mstest

我一直在考虑为 Controller Controller 实现单元测试,特别是围绕测试集合。关于MSDN example使用CollectionAssert.Contains()确认对象是否出现在列表中。

我有一个 List<myObject>其中 myObject工具 IEquatable (即实现 Equals() ,以便 List<myObject>.Contains() 能够正确辨别列表中类型为 myObject 的对象的存在(或不存在)。

CollectionAssert.Contains() (对于 MS-VS 测试,而不是 nunit)函数似乎没有调用 Equals() . 所以我想知道它是否用于简单数组? 如果不是,它如何比较自定义对象?

在这种情况下,我只是将断言更改为 Assert.IsTrue(myList.Contains(myObjectInstance)) .

最佳答案

查看 CollectionAssert.Contains() 的代码,实际的比较是通过迭代集合,并将每个元素与目标元素与 object.Equals(current, target) 进行比较来完成的。 .

所以你的问题的答案是,如果你没有覆盖 object Equals() 的版本以便它发送到您的 IEquatable<T>版本,你应该。否则,如果不满足引用相等性,测试将失败,因为 IEquatable<T>过载 Equals()不会覆盖从 object 继承的重载.

关于c# - CollectionAssert.Contains(myList, myItem) != Assert.IsTrue(myList.Contains(myItem)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502988/

相关文章:

c# - 单击邮件中的超链接

java - Mockito 验证单元测试 - 需要但未调用。事实上,与这个模拟的互动为零

c# - 使用 NPOI 时出现无法理解的错误

c# - DbProviderFactory 失败

c# - 如何在 C# 中使用 Skype4COM API 获取焦点组名称

c# - 使用 Webclient.Uploadfile 在文件上传期间获取上传进度

.net - 处理小图像(<=4k 像素数据)时强制进行 GC?

java - 如何使用 testng.xml 从大型 TestNG 套件执行一项测试?

c# - 无法通过 NUnit Mock 的 SetupSequence 使用多个返回

c# - 单击行标题时如何强制 datagridviewcell 结束编辑