Skip to main content
 首页 » 编程设计

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

2024年02月27日40shihaiming

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

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