Как мне тестировать классы с помощью методов, которые вызывают друг друга? - PullRequest
1 голос
/ 01 октября 2019

Извините за неопределенный вопрос для начинающих.

Допустим, есть родительский класс 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)) {
            ...
        }
        ...
    }
}

Теперь я хочу протестировать эту группу классов, но я не уверен, что это лучший метод.

  1. Я мог бы проверить методы родительского метода validateOne () и validateTwo (). Но мне нужно либо: А) Повторить эти тесты при тестировании детских методов validate (), делающих родительские тесты устаревшими, либо Б) Я бы пропустил эти тесты для детей, создав, как мне кажется, неполные тестовые случаи. И если я пропущу эти тесты в дочерних классах, то, если кто-то в будущем проведет рефакторинг кода и полностью пропустит этот родительский шаг проверки, мои тесты не поймут этого.

  2. Я мог быпросто создайте тестовые случаи для дочерних элементов, но если несколько дочерних элементов используют один и тот же метод validateX () от родителя, то я буду повторять тесты, а не следовать коду DRY (действительно ли код DRY применим к модульным тестам?)

  3. Я мог бы создать тестовый класс для родителя и вызвать родительский тестовый класс в дочерних тестовых классах, но похоже, что люди обычно не одобряют это, как видно из третьего ответа здесь ,И хотя пример, приведенный в этом ответе, прямо отвечает на мой вопрос, неясно, как мне поступить, если у классов нет родительско-дочерних отношений.

Вариант 3 имеет для меня наибольшее значение, ноЕсть ли лучший вариант и почему? Я чувствую, что ответ должен быть очевидным, так как это распространенный случай, не только с родительскими / дочерними классами, но меня никогда не учили, что лучше.

1 Ответ

0 голосов
/ 02 октября 2019

Похоже, что лучше всего сделать или смоделировать поведение родительского метода (если метод оказывает значительное влияние на выходные данные дочернего метода) или проверить, был ли вызван родительский метод, и продолжить работу с него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...