У меня есть проект Java, тестируемый с помощью JUnit (смесь стилей Junit 3 и 4), где тестируемые классы могут регистрировать ошибку log4j.Я хотел бы сделать модульный тест неудачным, если такая ошибка будет зарегистрирована.
Существует ли общий способ настройки либо log4j, либо инфраструктуры модульного тестирования для выполнения любого вызова метода log4j error () в кодепри тестировании выдает исключение времени выполнения и, следовательно, не проходит тест?AOP может быть одним из способов, но меня интересуют и другие возможности.
Цель здесь - отсеять места в коде, где log4j error () используется неправильно.То есть, когда регистрируется ошибка, но не происходит исключений или обработки ошибок, либо это не действительно ошибка, либо она возникает и должна возникать.
например:
public class MyTest extends TestCase {
public void testLogAnError() {
// Want to make this fail
new MyClass().logAnError();
}
}
public class MyClass() {
static Logger logger = Logger.getLogger("foo");
public void logAnError() {
// I'm logging an error, but not doing anything about it
logger.error("Something bad, or is it?");
// TODO throw an exception or don't log an error if there isn't one
}
}
Обновить: Вот как выглядит решение, которое я использую в настоящее время.Он основан на ответе sbridges (добавлен в тестовый класс):
private static final Appender crashAndBurnAppender = new NullAppender () {
public void doAppend(LoggingEvent event) {
if(event.getLevel() == Level.ERROR) {
throw new AssertionError("logged at error:" + event.getMessage());
}
}
};
Затем в setUp:
Logger.getRootLogger().addAppender(crashAndBurnAppender);
И tearDown:
Logger.getRootLogger().removeAppender(crashAndBurnAppender);