我必须将MS单元测试转换为NUnit并且遇到此断言。断言集合中的所有项目都具有使用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是什么)
E DIT 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 =>通过
[{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:我的最终解决方案的基础上,法比奥的回答
IEnumerable<long?> locationIds = collection.Select(item => item.location.id);
Expect(locationIds, Has.All.EqualTo(locationIds.FirstOrDefault()));
您期待所有项目都是唯一的吗?你能举一个集合可能是什么样子的例子吗? –
我试图理解这个断言的价值,调用.Distinct会自动去除所有重复对象,你的结果将永远等于1. –
@MoeGhafari好点。事实上唯一的办法是失败的是,如果列表是空的,条件将始终成立。 –