JUnit:检查一个集合是否只包含某种类型的对象
问题描述:
假设我有一个返回Animal
的集合的方法。在一种情况下,我想检查这个方法恰好包含7 Dog
s。检查数字不是问题,但是如何检查所有动物是否为Dog
的实例?JUnit:检查一个集合是否只包含某种类型的对象
我想我可以遍历集合,但是有更多的JUnity说“声明这个集合只包含对象是狗”吗?
答
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);
答
当我开始在Groovy中编写单元测试时,我获得了很好的结果。无风险的生产代码,但在单元测试代码的大小大大降低:
assert animals.size == 7 && animals.every { it instanceof Dog }
唯一的问题是,几天后,要使用Groovy生产代码了。
新政。希望在NUnit中有类似的东西,http://www.nunit.org/index.php?p=collectionAssert&r=2.5 – Svish 2011-06-09 13:56:25