Давайте сделаем вид, что у меня есть 3 класса, каждый из которых имеет один ответственно (и метод). Давайте также притворимся, что эти классы имеют интерфейсы для облегчения инъекции зависимостей. Класс A вызывает интерфейс для класса B, а класс B вызывает интерфейс для класса C. Если класс C выдает исключение NotAPrimeNumberException (если, скажем, параметр int не является простым числом), я бы ожидал, что будет единый тест, который гарантирует, что что C выдает исключение NotAPrimeNumberException, если переданный параметр не является простым числом. Все идет нормально.Единичное тестирование нескольких уровней исключений - где остановиться?
В настоящее время я убежден, что модульные тесты предоставляют всю документацию, необходимую для понимания поведения тестируемого метода. Таким образом, вышеупомянутый модульный тест был бы чем-то вроде MakeSureNotAPrimeNumberExceptionIsThrownIfNumberisNotPrimeTest().
Класс B знает, что класс C может вызывать исключение NotAPrimeNumberException. Если я хочу, чтобы исключение NotAPrimeNumberException вышло из класса B, я должен написать модульный тест для класса B, чтобы каким-то образом проверить, что в некоторых случаях возникает исключение NotAPrimeNumberException? Что относительно Класса А? Если A также позволяет пузырьку NotAPrimeNumberException, если у него также есть единичный тест для этого?
Мое беспокойство заключается в том, что если я не буду писать модульный тест в классе B, то потребители для класса B не будут знать, что класс B может вызывать этот тип исключения. Однако, если я напишу модульный тест, то немного глупо, что мне нужно заставить вызов класса B выбросить исключение NotAPrimeNumberException, чтобы НЕ обрабатывать исключение в классе B. Если я не буду писать единичный тест, что является ли подходящий способ, если таковой имеется, документировать в API, что это исключение может возникнуть?
Бонусный вопрос: как вы можете это сделать в NUnit с Rhino-mocks? Это, конечно, зависит от первых двух вопросов.
Тест должен проходить, когда ожидается ожидаемое поведение. Даже если это поведение бросает исключение. –