Моя первая мысль, что то, что у вас есть сейчас, не так уж плохо. Это просто, явно и легко настраивается (т. Е. step4()
имеет скриншот в первом тесте, но не во втором). Вы хотите абстрагироваться от скриншотов, потому что они кажутся беспорядочными, но вы, как автор, принимаете решение назвать его в некоторых ситуациях, а не в других, и это решение должно быть где-то закодировано.
Тем не менее, вы могли бы ...
A) Погрузите takeScreenshot()
в функции step()
и передайте флаг, который активирует его, когда истина. Однако использование таких флагов нарушает принцип Do One Thing , что делает дядю Боба раздражительным.
public void secondTest(){
step1();
step2(true);
step3(true);
step4();
step5();
step6(true);
}
B) Вы могли бы сделать что-то ДЕЙСТВИТЕЛЬНО причудливое и заставить все ваши step()
функции возвращать this
, так что вы можете связать их с помощью takeScreenshot()
(что, я полагаю, находится в другом месте в TestClass
). Это позволило бы вам совершить это (возможно, ужасное) преступление:
public void secondTest(){
step1();
step2().takeScreenshot();
step3().takeScreenshot();
step4();
step5();
step6().takeScreenshot();
}
C) Пожертвуйте возможностью настроить, будет ли снимок экрана сниматься после определенного действия, и просто жестко закодируйте его в набор действий, которые вас больше всего волнуют.
D) Или мой любимый вариант, оставь все как есть. То, что вы вызываете функцию снова и снова, не означает, что ваш код не СУХОЙ. Вы не дублируете никакой реальной логики Это больше строк кода, но эй, вы не собираетесь исчерпать строки. Чрезмерное различие и синтаксис могут сделать ваш код более читабельным, но если вы слишком сильно его сжимаете, пытаясь сделать 20 вещей в 12 строках, это может иметь неприятные последствия. Побалуйте себя этими дополнительными строками кода, это выходные, вы это заслужили.