Я работаю над тем, чтобы сделать мои классы модульно-тестируемыми, используя внедрение зависимостей. Но некоторые из этих классов имеют много клиентов, и я не готов реорганизовать их все, чтобы начать передавать зависимости. Поэтому я пытаюсь сделать это постепенно; пока сохраняем зависимости по умолчанию, но позволяем переопределять их для тестирования.
Один из подходов, который я придумаю, - это просто перевести все «новые» вызовы в их собственные методы, например:
public MyObject createMyObject(args) {
return new MyObject(args);
}
Затем в своих модульных тестах я могу просто создать подкласс этого класса и переопределить функции create, чтобы они вместо этого создавали поддельные объекты.
Это хороший подход? Есть ли недостатки?
В целом, нормально ли иметь жестко запрограммированные зависимости, если вы можете заменить их для тестирования? Я знаю, что предпочтительный подход состоит в том, чтобы явно требовать их в конструкторе, и я бы хотел в конечном итоге туда добраться. Но мне интересно, если это хороший первый шаг.
Один недостаток, который только что возник у меня: если у вас есть реальные подклассы, которые вы хотите протестировать, вы не можете повторно использовать тестовый подкласс, который вы написали для родительского класса. Вам нужно будет создать тестовый подкласс для каждого реального подкласса, и он должен будет переопределить те же функции создания.