2011-06-09 114 views
4

假设我有一个返回Animal的集合的方法。在一种情况下,我想检查这个方法恰好包含7 Dog s。检查数字不是问题,但是如何检查所有动物是否为Dog的实例?JUnit:检查一个集合是否只包含某种类型的对象

我想我可以遍历集合,但是有更多的JUnity说“声明这个集合只包含对象是狗”吗?

回答

2

JUnit的断言方法不能满足某些特定的要求。最好的办法是创建一个通用的辅助功能,像这样:

public static void assertTypeForAll(Collection<?> c, Class<?> type) { 
    for (Object o : c) { 
     Assert.assertTrue("Object " + o + " should be a subclass of " + type, type.isInstance(o)); 
    } 
} 

然后,你可以写:

assertTypeForAll(animals, Dog.class); 
+0

新政。希望在NUnit中有类似的东西,http://www.nunit.org/index.php?p=collectionAssert&r=2.5 – Svish 2011-06-09 13:56:25

1

当我开始在Groovy中编写单元测试时,我获得了很好的结果。无风险的生产代码,但在单元测试代码的大小大大降低:

assert animals.size == 7 && animals.every { it instanceof Dog } 

唯一的问题是,几天后,要使用Groovy生产代码了。

相关问题