当前位置:  开发笔记 > 编程语言 > 正文

xUnit:断言两个List <T>是否相等?

如何解决《xUnit:断言两个List<T>是否相等?》经验,为你挑选了3个好方法。

嗨,我是TDD和xUnit的新手所以我想测试我的方法,例如:

List DeleteElements(this List a, List b);

当然这不是真正的方法:)我可以使用任何Assert方法吗?我觉得这样的事情会很好

List values = new List() { 1, 2, 3 };
List expected = new List() { 1 };
List actual = values.DeleteElements(new List() { 2, 3 });

Assert.Exact(expected, actual);

有这样的事吗?



1> Konstantin S..:

xUnit.Net可识别集合,因此您只需要这样做

Assert.Equal(expected, actual); // Order is important

您可以在CollectionAsserts.cs中查看其他可用的集合断言

对于NUnit库集合,比较方法是

CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter

更多细节:CollectionAssert

MbUnit还有类似于NUnit的集合断言:Assert.Collections.cs



2> hwiechers..:

在当前版本的XUnit(1.5)中,您可以使用

Assert.Equal(expected,actual);

上述方法将对两个列表进行逐元素比较.我不确定这是否适用于任何先前版本.


我在Assert.Equal中遇到的问题是,如果集合的元素处于不同的顺序,它就会失败,即使这两个元素都存在.
如果集合类型不同,它似乎也会失败,即使它们都包含相同顺序的相同项目.

3> Drew William..:

使用xUnit,你是否想要挑选每个元素的属性来测试你可以使用Assert.Collection.

Assert.Collection(elements, 
  elem1 => Assert.Equal(expect1, elem1.SomeProperty),
  elem2 => { 
     Assert.Equal(expect2, elem2.SomeProperty);
     Assert.True(elem2.TrueProperty);
  });

这将测试预期计数并确保每个操作都经过验证.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有