На самом деле у меня есть два типа проблем, которые я считаю одним, проблема log4j в jUnit. Вы можете продолжить работу с jUnit + jMock, даже если log4j не настроен должным образом, он выдаст исключение, но не остановит выполнение jUnit.
Проблема, с которой я столкнулся:
1. Исключение FileNotFoundException с сообщением «сбой вызова setFile (null, true)»
2. jMock неожиданная ошибка вызова
Я решил номер 1 (хотя я все еще мог продолжить модульное тестирование даже с исключением log4j), поставив аргумент VM -Dlog4j.configuration=file:/C:/log4j/log4j.xml
. Я получал исключение, потому что он использовал log4j.xml внутри скомпилированного каталога (папка вывода по умолчанию для скомпилированных классов Java). Этот log4j имеет этот параметр <param name="File" value="${error.file}"/>
. Поэтому log4j ищет файл журнала с именем файла $ {error.file} (которого не существует). Как и то, что я сказал выше, я решил это, поставив аргумент VM выше.
Извлеченный урок: если вы получаете FileNotFoundException при выполнении log4j, попробуйте указать -Dlog4j.debug
в качестве аргумента виртуальной машины, чтобы увидеть, куда log4j извлекает файл конфигурации.
Я решаю номер 2, завершая все ожидаемые объекты внутри метода, который я тестирую. Хотя сообщение jMock довольно неоднозначно.
Извлеченный урок: неожиданный вызов обычно означает, что в вашем тестовом методе вы пропускаете объекты или фиктивные объекты, которые используются в методе, который вы используете для модульного тестирования. Это также означает, что вы не установили ожидания для объекта, который он пытается вызвать