java - 如何使用 Mockito 验证是否记录了错误消息?

标签 java logging mocking mockito

我有一个要测试的错误条件。我要验证的行为是将错误消息写入日志。由于 Mockito 不能 stub 静态方法,这相当困难,因为我希望我的被测类直接写入 System.err.println() 或我的静态 Log。 error() 方法。我不想将模拟的“记录器对象”注入(inject)到可能写入错误消息的每个对象中!

所以我想我要问的是,您认为构建我的 Log 类和/或被测类的最佳方式是什么,以便我可以 stub 日志记录方法或用模拟的方法替换它们记录器?

最佳答案甚至可能不会使用 Mockito,它可能是任何东西。我宁愿不导入另一个库,如 PowerMock,但如果你有一个好的答案需要类似的东西,我不介意看到它。

最佳答案

如果您想在静态方法中保留您的日志记录逻辑,您仍然可以在基于某些系统属性加载类时初始化真正的日志记录实现:

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 属性指定模拟类名。但是您需要在没有 mockito 魔法的情况下实现您的模拟日志记录类。

关于java - 如何使用 Mockito 验证是否记录了错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164243/

相关文章:

Java Mybatis 多条更新语句

java - 如何使用 Android Studio 安装 Android 库?

java - 部署 Java 应用程序。如何?

logging - 监控负载下的 log4j 行为

asp.net-core - 如何在Ubuntu上调试.NET Core MVC应用程序崩溃?

linux - kubernetes 中的子进程

java - 将 4 位数字值拆分为 3 个整数

c# - 返回传递给方法的值

unit-testing - 模拟 Grails 单元测试的方法

ruby-on-rails-4 - 使用 rails 4 和 rspec 3 被 verify_partial_doubles 绊倒