Общепринято, что вы не можете тестировать код, если он не настроен для тестирования?
Гипотетический бит кода:
public void QueueOrder(SalesOrder order)
{
if (order.Date < DateTime.Now-20)
throw new Exception("Order is too old to be processed");
...
}
Некоторые рассмотрели бы рефакторинг этого в:
protected DateTime MinOrderAge;
{
return DateTime.Now-20;
}
public void QueueOrder(SalesOrder order)
{
if (order.Date < MinOrderAge)
throw new Exception("Order is too old to be processed");
...
}
Примечание: Вы можете предложить еще более сложные решения; с использованием интерфейса IClock
и фабрики. Это не влияет на мой вопрос.
Проблема с изменением вышеуказанного кода заключается в том, что код изменился. Код был изменен без запроса клиента на его изменение. И любое изменение требует встречи и конференц-связи. И вот я в том месте, где легче ничего не проверять.
Если я не желаю / не могу вносить изменения: это делает меня неспособным проводить тестирование?
Примечание: Приведенный выше псевдокод может выглядеть как C #, но это только для того, чтобы его можно было прочитать. Вопрос не зависит от языка.
Примечание: Гипотетический фрагмент кода, проблема, необходимость рефакторинга и рефакторинг являются гипотетическими. Вы можете вставить свой собственный пример гипотетического кода, если вы обижаетесь с моим.
Примечание: Вышеприведенный гипотетический код является гипотетическим. Любое отношение к любому коду, живому или мертвому, является чисто случайным.
Примечание: Код является гипотетическим, но никаких ответов нет. Вопрос не субъективен: поскольку я верю, что есть ответ.
Обновление: Проблема здесь, конечно, в том, что я не могу гарантировать, что изменение в приведенном выше примере ничего не сломало. Конечно, я переделал один кусок кода в отдельный метод, и этот код логически идентичен.
Но я не могу гарантировать, что добавление нового защищенного метода не сместило таблицу виртуальных методов объекта , и если этот класс находится в DLL, то я только что ввел нарушение доступа.