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

Collections JUnit:检查集合是否只包含特定类型的对象,collections,types,junit,Collections,Types,Junit,假设我有一个方法返回Animals的集合。在一个例子中,我想检查这个方法是否恰好包含7个Dogs。检查数字不是问题,但是如何检查所有动物是否都是狗的实例 我想我可以在集合上循环,但是说“断言这个集合只包含狗的对象”是否更简单呢?当我开始用Groovy编写单元测试时,我得到了很好的结果。对生产代码没有风险,但大大减少了单元测试代码的大小: assert animals.size == 7 && animals.every { it instanceof Dog } 唯一的问题是,

假设我有一个方法返回
Animal
s的集合。在一个例子中,我想检查这个方法是否恰好包含7个
Dog
s。检查数字不是问题,但是如何检查所有动物是否都是狗的实例


我想我可以在集合上循环,但是说“断言这个集合只包含狗的对象”是否更简单呢?

当我开始用Groovy编写单元测试时,我得到了很好的结果。对生产代码没有风险,但大大减少了单元测试代码的大小:

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

唯一的问题是,几天后,您也希望将Groovy用于生产代码。

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);