c# - 断言两个 List<List<T>> 彼此等价

标签 c# nunit

为了确保两个列表相同,在 nunit 中,我们可以使用 CollectionAssert.AreEquivalent 检查这两个列表是否包含相同的元素(顺序不重要)。

但是如何检查两个List<List<T>>是等价的吗?这个想法是,如果一个 List<T>具有与另一个相同的元素 List<T> (同样,顺序不重要)那么它们是相等的。

最佳答案

您必须遍历它们以确保它们是等价的,但有一些重要的快捷方式:

  1. 如果它们实际上是同一个实例(并且在实际代码中经常出现这种情况),则 ReferenceEquals(x, y) 将返回 true。否则不会。如果 ReferenceEquals 返回 true,则它们是等价的。

  2. 如果一个为空而另一个不为空,那么显然它们不相等(如果它们都为空,您将在上面使用 ReferenceEquals 捕捉到这一点)。为了安全起见,您无论如何都需要测试 null,因此在许多情况下您还有另一个捷径。

  3. 如果它们的大小不同,则(对于大多数等价定义,有异常(exception))它们不相等。立即返回 false。

  4. 一旦发现不匹配,就可以返回 false 而无需继续检查。

  5. 如果它们已经排序,比较它们会更快。如果您可以让它们保持排序,或者失败时跟踪它们是否已排序,然后仅在需要时进行排序,您可以大大加快速度。 (请注意,许多排序算法在对已排序的列表进行不必要的排序时会出现最坏情况)。

关于c# - 断言两个 List<List<T>> 彼此等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3502713/

相关文章:

c# - 自动映射器映射动态对象

c# - 哪个类用于 "Text Visualizer"?

c# - 如何检测 TeamCity 中是否正在运行 NUnit 测试?

nunit - 使用 NUnit 的 TFS Build 2010 代码覆盖率

c# - Blazor Bootstrap 5模态: how to not bind a property to value?

c# - 缓慢显示对于 ASP.NET Core MVC 中的性能

c# - 将 Resharper 中的间距行为更改为多行 lambda 现场表达式

.net - 测试公共(public) API 是否足以对 API 组件进行单元测试?

c# - Selenium Nunit 插件安装异常

c# - 按照测试方法的方式参数化测试装置