Извините за неопределенный вопрос для начинающих.
Допустим, есть родительский класс Parent со структурой, похожей на:
public class Parent {
public boolean validateOne(Request req) {
...
}
public boolean validateTwo(Request req) {
...
}
}
Допустим, есть дочерние классы, каждый сих собственный метод validate, который вызывает родительский метод validate.
public class ChildOne {
public boolean validate(Request req) {
if (validate1(req)) {
...
}
...
}
}
public class ChildTwo {
public boolean validate(Request req) {
if (validate2(req)) {
...
}
...
}
}
Теперь я хочу протестировать эту группу классов, но я не уверен, что это лучший метод.
Я мог бы проверить методы родительского метода validateOne () и validateTwo (). Но мне нужно либо: А) Повторить эти тесты при тестировании детских методов validate (), делающих родительские тесты устаревшими, либо Б) Я бы пропустил эти тесты для детей, создав, как мне кажется, неполные тестовые случаи. И если я пропущу эти тесты в дочерних классах, то, если кто-то в будущем проведет рефакторинг кода и полностью пропустит этот родительский шаг проверки, мои тесты не поймут этого.
Я мог быпросто создайте тестовые случаи для дочерних элементов, но если несколько дочерних элементов используют один и тот же метод validateX () от родителя, то я буду повторять тесты, а не следовать коду DRY (действительно ли код DRY применим к модульным тестам?)
Я мог бы создать тестовый класс для родителя и вызвать родительский тестовый класс в дочерних тестовых классах, но похоже, что люди обычно не одобряют это, как видно из третьего ответа здесь ,И хотя пример, приведенный в этом ответе, прямо отвечает на мой вопрос, неясно, как мне поступить, если у классов нет родительско-дочерних отношений.
Вариант 3 имеет для меня наибольшее значение, ноЕсть ли лучший вариант и почему? Я чувствую, что ответ должен быть очевидным, так как это распространенный случай, не только с родительскими / дочерними классами, но меня никогда не учили, что лучше.