Скажем, у меня есть интерфейс с двумя классами, которые реализуют его. Итак, у нас есть интерфейс I, с классами A и B. Для этих 2 классов нам нужно протестировать ту же реализованную функцию doSomething() с JUnit4. Есть некоторые зависимости, поэтому мы используем Mockito. Примерный пример выглядит так:Тестирование нескольких классов с помощью 1 теста
@Mock private dependantClass d;
@Test
public void test() {
A.doSomething();
verify(d).expectedBehavior();
}
Я написал набор тестов для A (4 теста), никаких проблем. Однако теперь мне приходится реструктурировать набор тестов, чтобы я мог выполнять один и тот же тестовый класс для объектов A и B. Для этого я должен использовать иерархию параллельного класса.
Это оставило меня в тупике. Я попытался использовать аннотацию @Parameters, но это дает мне ошибку, что у меня слишком много входных аргументов. Я пробовал сделать супер-класс тестирования, из которого распространяются как ATest, так и BTest, но я догадываюсь, что я не делаю это правильно, потому что получаю исключения nullpointer.
Фактически копирование всех тестовых примеров и просто изменение A-B проходит все тесты, то есть эти два класса делают то же самое. Я понимаю, что это звучит как ошибочный дизайн, и, честно говоря, возможно. Тем не менее, у меня нет возможности реально изменить код, я просто должен его протестировать.
Я просто делаю что-то неправильно? Как мне это реализовать?
Просьба показать, как вы пытались параметризовать свои тесты. Это правильный подход, и вы, вероятно, пропустили что-то маленькое. – dasblinkenlight
Интересно, почему [параметризованные тесты] (https://github.com/junit-team/junit/wiki/Parameterized-tests) потерпели неудачу в вашем случае. Не могли бы вы опубликовать фрагмент на вашей попытке? –
Это довольно распространенный вариант использования @Parameters, поэтому вам может потребоваться показать некоторые детали этой попытки. «Слишком много входных аргументов» может быть простой ошибкой (такой как несоответствие с сигнатурой конструктора), которая может быть диагностирована, если вы отправляете этот код. – sprinter