Основной подход, который я бы попробовал, состоял бы в следующем:
- Создайте пользовательское приложение для ведения журнала для вашей среды ведения журналов, которое подтвердило ожидаемое содержимое.
- Убедитесь, что ваш тест JUnit выполняется с этим приложением, возможно, потому, что он является частью вашей конфигурации ведения журнала тестирования, или, возможно, путем динамического добавления его при запуске теста.
- Пусть этот тест JUnit запустит запуск вашего приложения.
- В конце теста JUnit проверьте какое-либо свойство в appender, чтобы убедиться, что оно записало то, что вы ожидали, и не пройдите тест, если он этого не сделал.
Я не думаю, что есть много встроенных функций, чтобы помочь вам, поэтому вам, возможно, придется написать немного этой инфраструктуры самостоятельно, если вы не найдете чью-то библиотеку, чтобы помочь. Если вы входите в систему с помощью slf4j, я написал некоторый код, который заставляет пользовательского аппендера не пройти тест, если в журнале появляется сообщение об ошибке с похожим вопросом . Возможно, вы сможете использовать его в качестве отправной точки для того, как динамически включать аппендер при выполнении определенного теста JUnit. Есть также несколько примеров для java.util.Logging и log4j в " Как сделать утверждение JUnit для сообщения в логгере ".
В общем, операторы протоколирования не являются «основной» функциональностью и предназначены только для того, чтобы помочь понять процесс, поэтому обычно нет необходимости их модульного тестирования. Возможно, вам лучше просто проверить результаты запуска приложения - это то, что вы ожидаете, и не проверять отдельно, что оно также регистрирует что-то во время процесса. Предположительно, если он запускается правильно, он также будет запускать все записи в нем. Лично мне не нужно быть более изощренным, чем просто проверять, что не было зарегистрировано ошибок, как в этом связанном ответе, но, возможно, у вас есть более сложные требования.