gpt4 book ai didi

c# - 为外部集合中的每个项目断言内部集合中的元素数

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:45 25 4
gpt4 key购买 nike

我想检查集合中的每一项是否都有包含一定数量元素的集合。现在我正在通过以下方式进行操作:

// 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);
}
});

关于c# - 为外部集合中的每个项目断言内部集合中的元素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45028376/

25 4 0
文章推荐: html - 在两个背景中有一个洞的图像
文章推荐: jquery - 有没有办法限制可以拖动的区域?
文章推荐: node.js - 如何确定需要的来源?
文章推荐: html - 堆叠的