JUnit:检查集合是否只包含特定类型的对象



假设我有一个返回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用于生产代码。

最新更新