Для меня модульный тест имеет 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, чтобы сделать тест стабильным.
Иногда я хочу проверить извлеченные внутренние методы отдельно.Я предпочитаю сделать этот метод частным.Таким образом я могу вызывать их из своего теста (если он находится в том же пакете, в котором находится папка с исходным кодом теста), не перезаписывая их.