JUnit: убедитесь, что коллекция содержит только объекты определенного типа - PullRequest
4 голосов
/ 09 июня 2011

Скажем, у меня есть метод, который возвращает коллекцию Animal с.В одном случае я хочу проверить, что этот метод содержит ровно 7 Dog с.Проверка номера не является проблемой, но как бы вы убедились, что все животные являются экземплярами Dog?

Полагаю, я мог бы перебрать коллекцию, но есть ли еще одна возможность сказать "утверждать"что эта коллекция содержит только предметы, которые "собаки"?

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Методы утверждений 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);
1 голос
/ 09 июня 2011

Я получил отличные результаты, когда начал писать юнит-тесты в Groovy. Нет риска для производственного кода, но значительно уменьшен размер кода модульного теста:

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

Единственная проблема в том, что через несколько дней вы захотите использовать Groovy и для производственного кода.

...