Модульное тестирование метода, вызывающего другой метод - PullRequest
50 голосов
/ 12 декабря 2008

Каков наилучший способ модульного тестирования метода, который вызывает несколько методов, например:

modify(string value)
{
    if(value.Length > 5)  replaceit(value);

    else changeit(value);
}

Этот псевдокод имеет метод модификации, который (в настоящее время) вызывает либо replaceit(), либо changeit(). Я уже написал тесты для replaceit и changeit, поэтому написание нового теста для модификации будет на 99% таким же набором кода. Мне нужно проверить это, подумал, потому что это может измениться в будущем.

Так я могу скопировать вставить существующий тестовый код? Переместить тестовый код в общую функцию? Есть еще идеи? Я не уверен в лучшей практике здесь.

Ответы [ 12 ]

2 голосов
/ 12 декабря 2008

Ну, нет, ваш тестовый код не будет на 99% одинаковым, потому что вы на самом деле тестируете здесь что-то другое, если только replaceit, changeit и модификация не возвращают одинаковые значения.

Не уверен, почему сложность. Тест для метода модификации должен иметь длину приблизительно четыре строки. Поскольку вы уже тестируете базовую функциональность и все, что вам нужно сделать, это убедиться, что этот конкретный метод не сломан, написание теста, который проверяет два возможных пути кода в этой функции, возвращает ожидаемые значения.

0 голосов
/ 12 декабря 2008

То же, что и у Джастина Стандарта, плюс с передачей null в качестве значения (что, очевидно, не сработает для фрагмента кода, который вы нам предоставите;)) Основное правило для модульного тестирования - «тестировать только то, что относится к тестируемому методу». И довольно ... необычно иметь метод, который не вызывает другого.

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