假设我有一个返回Animal
s集合的方法。在一种情况下,我想检查这个方法是否正好包含7个Dog
s。检查数字不是问题,但如何检查所有动物都是Dog
的实例?
我想我可以循环浏览这个集合,但说"断言这个集合只包含狗的对象"是否更有正义感?
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用于生产代码。