Задать вопрос
@vi0

Правильно ли вынесение метода проверки в другой сервис для упрощения тестирования?

Существует method1, в котором, есть check1(data), который может выбрасывать исключение.
Я вынес check1 в другой сервис, чтобы упростить тестирование, т.е. чтобы ветвление "есть/нет исключения" проверить изолированно. Но вижу, что тестирование не упрощается, т.к. в исходном методе все равно нужно проверить эти сценарии "есть/нет исключения" при check1.

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

public method1(){
	...
	check1(data)
	...
}
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Рефакторинг должен происходить из соображений чистоты кода и архитектуры.
Для «упрощения тестирования» ничего никуда переносить не стоит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Mercury13
Программист на «си с крестами» и не только
check1() иногда годится, если проверка многократно выполняется в разных функциях, по принципу «не повторяйся». Например, для const-корректности Си++, или для хитрых интерфейсов, когда есть objectId(i), objectName(i).

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

UPD. Вынесение РАЗОВОЙ функциональности (если это реакция на некорректные данные, конечно) в отдельную функцию КРАЙНЕ РЕДКО делает код более тестопригодным: может быть, что реакция на некорректности так размыта, что вызов основной функции мало что даст. Может, реакция на некорректности так сложна, что стоило бы её проверить отдельно. Ну ХЗ, в большинстве случаев бессмысленно.

UPD2. Тестируемость кода — это в первую очередь возможность выделить функциональность для тестирования и не тащить вместе с ней половину программы.
Ответ написан
Комментировать
@Dmtm
Android
я правильно понимаю что check нельзя сделать до вызова method?
тогда можно разбить method на два
try {
результат1 = method1_2
результат2 = check(результат1) )
method2_2(результат2)
} catch
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы