Ano*_*use 4 .net c# linq collections unit-testing
在测试中我需要测试一个对象:
IEnumerable<int> Ids.
Run Code Online (Sandbox Code Playgroud)
该集合包含数字1,2和3.
我基本上想测试一下ID中有三个ID,而且1,2和3都存在.
问题是IEnumerable没有计数.
我以为我能够去:
Assert.AreEqual(3, Ids.Count);
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何做到这一点以及如何确保1,2和3是那里的实际数字?
Assert.IsTrue(Ids.SequenceEqual(Enumerable.Range(1, 3));
Run Code Online (Sandbox Code Playgroud)
不仅测试有三个数字,而且通过确保每个元素匹配相应的元素,按顺序测试数字1,2和3 Enumerable.Range(1, 3).
编辑:将Range此处与Kirill Polishchuk的答案结合起来,建议:
CollectionAssert.AreEqual(Enumerable.Range(1, 3), Ids);
Run Code Online (Sandbox Code Playgroud)
如果您Ids没有给出订单,最简单的测试正确性是在测试中应用该订单,使我们能够应用上述内容:
CollectionAssert.AreEqual(Enumerable.Range(1, 3), Ids.OrderBy(x => x));
Run Code Online (Sandbox Code Playgroud)
您可以使用LINQ扩展方法来满足这些需求:
using System.Linq;
…
Assert.AreEqual(3, Ids.Count());
Assert.IsTrue(Ids.Contains(1));
//etc.
Run Code Online (Sandbox Code Playgroud)
如果您想以完全相同的顺序拥有完全相同的项目,还有:
Assert.IsTrue(Ids.SequenceEqual(new List<int>{ 1, 2, 3 }));
Run Code Online (Sandbox Code Playgroud)
根据语义不能保证排序IEnumerable<T>,但这可能不是您特定情况下的结果.
| 归档时间: |
|
| 查看次数: |
5502 次 |
| 最近记录: |