NUnit:断言IEnumerable是否包含某种类型的对象的最简洁方法是什么?

时间:2010-03-01 13:38:45

标签: linq unit-testing nunit

我有一个名为 RenderContent 的方法,它返回object[]
在我的单元测试中,我需要声明此数组不包含VerifyRequest

类型的任何对象

目前,我正在使用以下Assert声明。还有什么更简洁的吗?

Assert.That(
    domain.RenderContent().OfType<VerifyRequest>().Count(),
    Is.EqualTo(0)
);

我更喜欢使用流利的语法。另请注意, RenderContent 会返回object[],而不是IQueryable<object>

5 个答案:

答案 0 :(得分:14)

如果您使用的是NUnit 2.5,则可以使用以下内容:

Assert.That(domain.RenderContent(), Has.None.InstanceOf<VerifyRequest>());

但我不确定其他单元测试框架是否支持这种断言风格。

答案 1 :(得分:12)

虽然我不知道IsFalse断言的确切NUnit语法,但最适合此类测试的是Any扩展方法:

Assert.IsFalse(domain.RenderContent().OfType<VerifyRequest>().Any());  

使用Count方法可能很诱人,但Any效率更高,因为它会在第一次出现时中断。

答案 2 :(得分:2)

Any扩展方法,可以给出lambda表达式:

Assert.IsFalse(domain.RenderContent().Any(i => i is VerifyRequest));

答案 3 :(得分:1)

您可以使用Assert.AreEqual方法来缩短它:

Assert.AreEqual(domain.RenderContent().OfType<VerifyRequest>().Count(), 0);

答案 4 :(得分:1)

我更喜欢Assert.AreEqual方法; NUNit使用Assert。用于内部Assert,STringAssert等对象。我喜欢Assert.AreEqual(0,domain.RenderContent()。OfType()。Count());检查计数。

这样,它直接检查一个类型的对象没有任何数量的记录,但是在某一点上,您看到的变体是首选项,它们都是同等有效的。你必须选择你喜欢的发展方式。