xUnit : 断言两个 List; 是平等的吗?
我是 TDD 和 xUnit 的新手,所以我想测试我的方法,如下所示:
List<T> DeleteElements<T>(this List<T> a, List<T> b);
是否有我可以使用的 Assert 方法? 我认为这样的事情会很好
List<int> values = new List<int>() { 1, 2, 3 };
List<int> expected = new List<int>() { 1 };
List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });
Assert.Exact(expected, actual);
有这样的事情吗?
I'm new to TDD and xUnit so I want to test my method that looks something like:
List<T> DeleteElements<T>(this List<T> a, List<T> b);
Is there any Assert method that I can use ? I think something like this would be nice
List<int> values = new List<int>() { 1, 2, 3 };
List<int> expected = new List<int>() { 1 };
List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });
Assert.Exact(expected, actual);
Is there something like this ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
2021 年 4 月 1 日更新
我建议使用 FluentAssertions。 它拥有一个庞大的 IntelliSense 友好断言库,适用于许多用例,包括 集合
原始答案
xUnit.Net< /strong> 识别集合,因此您只需要做
您可以在 CollectionAsserts.cs
对于 NUnit 库集合比较方法是
,
更多详细信息请参见:CollectionAssert
MbUnit 也有类似于 NUnit 的集合断言:Assert.Collections.cs
2021-Apr-01 update
I recommend using FluentAssertions. It has a vast IntelliSense-friendly assertion library for many use cases including collections
Original answer
xUnit.Net recognizes collections so you just need to do
You can see other available collection assertions in CollectionAsserts.cs
For NUnit library collection comparison methods are
and
More details here: CollectionAssert
MbUnit also has collection assertions similar to NUnit: Assert.Collections.cs
在当前版本的 XUnit (1.5) 中你可以使用
上面的方法将对两个列表进行逐个元素的比较。
我不确定这是否适用于任何以前的版本。
In the current version of XUnit (1.5) you can just use
The above method will do an element by element comparison of the two lists.
I'm not sure if this works for any prior version.
使用 xUnit,如果您想挑选每个元素的属性来测试,可以使用 Assert.Collection。
这会测试预期计数并确保每个操作都经过验证。
With xUnit, should you want to cherry pick properties of each element to test you can use Assert.Collection.
This tests the expected count and ensures that each action is verified.
在当前版本的 xUnit v2.4.2 中,您还可以使用:
In the current version of xUnit v2.4.2 you can also use:
最近,我在我的 asp.net core 2.2 应用程序中使用
xUnit 2.4.0
和Moq 4.10.1
包。就我而言,我设法通过两个步骤让它工作:
定义
IEqualityComparer
的实现
将比较器实例作为第三个参数传递到
Assert.True
方法中:Assert.True(预期、实际、new MyEqualityComparer());
但是还有另一种更好的方法来获取使用 FluentAssertions 包得到相同的结果。 它允许您执行以下操作:
有趣的是,即使我对两个列表的元素进行排序以使它们按相同顺序排列,
Assert.Equal()
仍然会失败。Recently, I was using
xUnit 2.4.0
andMoq 4.10.1
packages in my asp.net core 2.2 app.In my case I managed to get it work with two steps process:
Defining an implementation of
IEqualityComparer<T>
Pass the comparer instance as a third parameter into
Assert.True
method:Assert.True(expected, actual, new MyEqualityComparer());
But there is another nicer way to get the same result using FluentAssertions package. It allows you to do the following:
Interestingly that
Assert.Equal()
always fails even when I ordered the elements of two lists to get them in the same order.我找到了断言两个列表相等的最佳方法
i found best way for assert equallity two list