Я работаю с устаревшей кодовой базой, и я хотел бы использовать TDD для добавления новых функций к коду, который я сейчас изменяю.
Обратите внимание, что в текущей кодовой базе НЕ имеется UT'S.
У меня есть класс Calculator
со следующей реализацией:
public final class Calculator extends CalculatorBase {
public Calculator(Document document) throws Exception {
super(document);
}
public int Multiply(int source, int factor) {
return source * factor;
}
}
Этот класс наследует от следующего базового класса:
public class CalculatorBase {
public CalculatorBase(Document document) throws Exception {
throw new Exception("UNAVAILABLE IN UT CONTEXT.");
}
}
ПРИМЕЧАНИЕ. Конструктор на самом деле делает много вещей, которые я бы не хотел делать в UT. Для простоты я заставил конструктор выдать исключение.
Теперь я хочу добавить функцию Add в класс Calculator. Эта функция выглядит следующим образом:
public int Add(int left, int right) {
return left + right;
}
UT для этого конкретного фрагмента кода должно быть очень простым.
@Test
@DisplayName("Ensure that adding numbers DOES work correctly.")
void addition() throws Exception {
// ARRANGE.
Calculator calculator = new Calculator(null);
// ACT.
int result = calculator.Add(1, 1);
// ASSERT.
Assertions.assertEquals(2, result);
}
Поскольку конструктор базы CalculatorBase
действительно выдает исключение, модульное тестирование НИКОГДА не пройдет.
Сложность создания этого тестируемого компонента заключается в том, что класс CalculatorBase
автоматически создается инструментом, поэтому исходный код этого класса не может быть изменен.
Какие (детские) шаги я должен предпринять, чтобы убедиться, что метод Add
класса Calculator
может быть протестирован? Цель состоит в том, чтобы сделать весь проект тестируемым и даже избавиться от автоматически сгенерированных вещей, но я хотел бы использовать TDD везде, где это возможно, для постепенного рефакторинга кода.
Можно утверждать, что я может сделать метод Add
stati c, так как он не использует никаких зависимостей класса Calculator
, но код просто быстро добавляется вместе. В реальном сценарии функция Add
является чем-то еще, что потребляет состояние класса Calculator
.