Я работаю с устаревшей базой кода и хотел бы использовать TDD для добавления новых функций в код, который я сейчас изменяю.
Обратите внимание, что в текущей кодовой базе НЕТ UT.
У меня есть класс 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. Для простоты я заставил конструктор генерировать исключение.
Теперь я хочу добавить к классу 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
статическим, поскольку он не использует никаких зависимостей класса Calculator
, но код просто быстро складывается. В реальном сценарии функция Add
- это что-то еще, что потребляет состояние класса Calculator
.