Велике спасибі за ці (напрочуд) швидкі та корисні відповіді; вони поставили мене на правильний шлях для мого рішення.
Я хочу використовувати цю кодову базу, використовуючи java.util.logging як свій механізм реєстрації, і я не відчуваю себе вдома достатньою мірою, щоб повністю змінити це на log4j або на інтерфейси / фасади журналу. Але виходячи з цих пропозицій, я "зламав" розширення для юлхандлера, і це працює як частування.
Наступний короткий підсумок. Розширити java.util.logging.Handler
:
class LogHandler extends Handler
{
Level lastLevel = Level.FINEST;
public Level checkLevel() {
return lastLevel;
}
public void publish(LogRecord record) {
lastLevel = record.getLevel();
}
public void close(){}
public void flush(){}
}
Очевидно, ви можете зберігати стільки, скільки хочете / хочете / потребуєте LogRecord
, або натискати їх у стек, поки не отримаєте переповнення.
Під час підготовки до тесту з джуніту ви створюєте java.util.logging.Logger
та додаєте LogHandler
до нього таке нове :
@Test tester() {
Logger logger = Logger.getLogger("my junit-test logger");
LogHandler handler = new LogHandler();
handler.setLevel(Level.ALL);
logger.setUseParentHandlers(false);
logger.addHandler(handler);
logger.setLevel(Level.ALL);
Заклик setUseParentHandlers()
- замовкнути нормальних обробників, щоб (для цього тестування з Джуніт-тесту) не траплялося зайвих журналів. Зробіть все, що потрібно для тестування коду, щоб використовувати цей реєстратор, запустіть тест і сформулюйте рівність:
libraryUnderTest.setLogger(logger);
methodUnderTest(true); // see original question.
assertEquals("Log level as expected?", Level.INFO, handler.checkLevel() );
}
(Звичайно, ви б перенесли велику частину цієї роботи в @Before
метод і внесли різні вдосконалення, але це заплутало б цю презентацію.)
logger.getAllAppenders()
, потім перейти та зателефонуватиappender.setThreshold(Level.OFF)
кожному (і скинути їх, коли закінчите!). Це гарантує, що "погані" повідомлення, які ви намагаєтеся генерувати, не відображаються в тестових журналах і вироджують наступного розробника.