Почему считается плохой практикой проверять класс, расширяя его? - PullRequest
2 голосов
/ 16 апреля 2019

Насколько я понимаю, есть два основных метода для тестирования класса.

  1. тестовый класс для расширения тестируемого класса
  2. тестовый класс для создания тестируемого класса(состав)

Насколько я могу судить, первый метод считается плохой практикой.

но почему это так?

1 Ответ

1 голос
/ 27 июня 2019

Для меня модульный тест имеет 2 основных цели:

  1. проверить, что тестобъект делает то, что я от него ожидаю
  2. документ о том, как правильно использовать тестируемый класс

Расширяя тестируемый класс, тестовые швы могут изменить поведение классов.Это плохая практика для тестирования.Иногда я даже делаю это, чтобы исправить, например, зависимость от текущего времени, как это, если у DI нет выбора:

   private InstanceToTest instance;
   private Calendar now = new GregorianCalendar(2019, 4, 4, 13, 23, 47);
   @Before
   public void initInstance() {
      instance = new InstanceToTest() {
         @Override
         Calendar getNow() {
            return now;
         }
      };
   }

Теперь я могу проверить 4 апреля 2019, 13:23:47, чтобы сделать тест стабильным.

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

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