我想检查集合中的每一项是否都有包含一定数量元素的集合。现在我正在通过以下方式进行操作:
// Given
CollectionGenerator collectionGenerator = new CollectionGenerator (outerCollectionSize, innerCollectionSize);
// When
ICollection<SomeEntity> outerCollection = collectionGenerator.GenerateCollection();
// Then
foreach (SomeEntity someEntity in outerCollection)
{
Assert.AreEqual(innerCollectionSize, someEntity.InnerCollection.Count);
}
有更好的方法吗?
请您参考如下方法:
你可以使用 AllItemsConstraint并做这样的事情:
Assert.That(outerCollection.Select(c => c.InnerCollection).ToList(),
Has.All.Count.EqualTo(innerCollectionSize));
这会在测试失败时给出稍微好一点的消息,例如:
Expected: all items property Count equal to 2
But was: < < 1, 2 >, < 1, 2, 3 > >
请注意 ToList 很重要,因为枚举没有 Count 属性。
根据 Chris'建议,你也可以这样做:
Assert.That(outerCollection.Select(c => c.InnerCollection),
Has.All.With.Exactly(innerCollectionSize).Items);
如果你确实想保留循环,你应该将它嵌入到 Assert.Multiple 中(仅在 NUnit 3 中可用)以便您获得所有失败,而不仅仅是第一个失败:
Assert.Multiple(() =>
{
foreach (SomeEntity someEntity in outerCollection)
{
Assert.AreEqual(innerCollectionSize, someEntity.InnerCollection.Count);
}
});
