Как использовать Mockito, чтобы убедиться, что сообщение об ошибке записано в журнал? - PullRequest
2 голосов
/ 29 мая 2011

У меня ошибка, которую я хочу проверить.Поведение, которое я хочу проверить, заключается в том, что сообщение об ошибке записывается в журнал.Поскольку Mockito не может заглушить статические методы, это довольно сложно, потому что я хочу, чтобы мой тестируемый класс записывал напрямую в System.err.println() или в мой статический Log.error() метод.Я не хочу вставлять в каждый объект, который может писать сообщения об ошибках, поддельный «объект логгера»!

Итак, я думаю, что я спрашиваю, что, по вашему мнению, является лучшим способомструктурировать мой класс Log и / или тестируемый класс так, чтобы я мог заглушить методы ведения журнала или заменить их поддельным средством ведения журнала?

Лучший ответ может даже не использовать Mockito, это может бытьчто-нибудь.Я бы предпочел не импортировать еще одну библиотеку, например PowerMock, но если у вас есть хороший ответ, требующий чего-то подобного, я не возражаю против его просмотра.

1 Ответ

2 голосов
/ 29 мая 2011

Если вы хотите сохранить свою логику ведения журнала в статических методах, вы все равно можете инициализировать реальную реализацию ведения журнала, когда класс загружается на основе некоторого системного свойства:

class Log {

  private static MyLogger logger;

  static {
    String className = System.getProperty("my.static.logger.class.name");
    // Instantiate your logger here...
    // By default use some DefaultLogger implementation...
  }

  public static void error(String message, Throwable t) {
    logger.error(message, t);
  }

}

Затем при запуске теста вы можетеукажите фиктивное имя класса, используя свойство -D.Но вам нужно реализовать свой класс журналирования без магии.

...