我需要将 MS 单元测试转换为 NUnit 测试,并遇到了这个断言。
Assert.AreEqual(collection.Select(item => item.location.id).Distinct().Count(), 1);
我希望有一种优雅的方式可以使用约束条件来编写它,但是我没有找到。我的解决方案是这样的,但我并不是很满意:
Expect(collection.Select(item => item.location.id).Distinct().Count(), Is.EqualTo(1));
有没有更好的方式编写这个断言,使意图更明确易读?(使用
Has.
或 Map(collection).
)
编辑2: 我刚意识到清楚地说明意图可能有所帮助:
收集中的所有项目具有相同的位置ID(不知道该ID是什么)
编辑1: 这就是集合可能看起来像JSON:
[{itemId=1, location={name="A", id=1}},
{itemId=2, location={name="A", id=1}},
{itemId=3, location={name="A", id=1}}]
distinct.count = 1 => pass
[{itemId=1, location={name="A", id=1}},
{itemId=2, location={name="A", id=1}},
{itemId=4, location={name="B", id=2}}]
distinct.count = 2 => 失败
编辑3:基于Fabio的答案我的最终解决方案
IEnumerable<long?> locationIds = collection.Select(item => item.location.id);
Expect(locationIds, Has.All.EqualTo(locationIds.FirstOrDefault()));
Select(item => item.location.id)
投影出每个项目的位置 ID 作为一个新列表,Distinct()
将会去除所有重复项,然后count
将返回集合中唯一位置 ID 的数量。 - Holly