Я просто прочитал статью Programming by Coincidence. В конце страницы существуют упражнения. Несколько фрагментов кода, которые являются случаями "программирования по совпадению". Но я не могу выяснить ошибку в этой части:
Этот код прибывает из комплекта трассировки Java общего назначения. Функция пишет строку в файл журнала. Это передает свой модульный тест, но перестало работать, когда один из Веб-разработчиков использует его. На какое совпадение это полагается?
public static void debug(String s) throws IOException {
FileWriter fw = new FileWriter("debug.log", true);
fw.write(s);
fw.flush();
fw.close();
}
Что не так об этом?
Этот код основан на том факте, что существует файл с именем debug.log
, который доступен для записи в каталоге выполнения приложения. Скорее всего, приложение веб-разработчика не настроено с этим файлом, и метод не работает, когда он пытается его использовать.
Модульный тест этого кода будет работать, потому что у исходного разработчика был нужный файл в нужном месте (и с нужными разрешениями). Это совпадение, которое позволило модульному тесту пройти успешно.
Интересный момент. В идеале ресурсы должны извлекаться из classpath. Однако человеческой глупости нет предела. Что произойдет, если файл присутствует в classpath тестовой среды (скажем, eclipse), но отсутствует в производственных развертываниях?
.