Как заставить JUnit ловить логи и терпеть неудачу

Я широко использую slf4j в своем приложении. Из соображений стабильности существуют сценарии, в которых мой код будет корректно обрабатывать состояние ошибки, просто регистрировать его как ошибку и двигаться дальше.

Тем не менее, я хочу написать тесты, которые демонстрируют, что для данного ввода моя SUT не генерирует такие журналы ошибок.

Например, мой код часто выглядит так:

public class MyClass {
  private static final Logger LOG = LoggerFactory.getLogger(MyClass.class);

  // snip

  public void someMethod(DTO input) {
    try {
      // snip
    } catch (SomeException e) {
      LOG.error("Code failed here!", e);
      // recover gracefully
    }
  }
}

Я хочу, чтобы в моем тестовом случае поймать что-то вроде

Mockito.verify(LOG.error(Mockito.anyString(), Mockito.any(SomeException.class), times(0));

Однако из-за того, как я генерирую LOG объект - используя slf4j LoggerFactory API, трудно издеваться LOG объект. То, что я действительно хочу сделать, это иметь другую реализацию тестирования slf4j (я использую logback в работе), к которой имеют доступ JUnit и Mockito. Как я могу это сделать?

Я использую JUnit 4.11, Mockito 1.9.5 и Jukito 1.3. Я бы предпочел не использовать PowerMock, поскольку он несовместим с Jukito.

0 ответов

Другие вопросы по тегам