表达 LINQ .Single() 语句是显式的 NUnit 测试

Expressing LINQ .Single() statement is explicit NUnit Test

我有以下测试:

[Test]
public void ListContainsAnObjectOfTypeFoo()
{
    list.Single(t => t.GetType() == typeof(foo));
}

这 "works" 在测试抛出异常并在该类型的项目不存在或存在多次的情况下失败的上下文中。

然而在语义上,它并不是很好。有什么方法可以使用显式 NUnit 断言来测试 Single() 条件是否成立?我想知道 CollectionAssert 中是否有我看不到的秘密。

而不是 Single,获取计数并将其与 1 进行比较,例如:

list.Count(t => t.GetType() == typeof(foo)) ! = 1

您可以使用.Count(condition)==1

因此,在您的情况下,使用带有条件的断言:

list.Count(t => t.GetType() == typeof(foo)) == 1

五年后回到这个话题,现在 NUnit 中有一个更好的解决方案!

Assert.That(list, Has.Exactly.One.TypeOf<foo>());