java - 在测试中模拟一个 Logger 类

标签 java spring testing mockito slf4j

我需要在 @Service 类中模拟一个 Logger 来进行测试。我想验证是否会创建记录器消息。 (SLF4J 记录器)

我想我可以使用@Bean 类来做到这一点,并使 Logger 在 spring 上成为托管 bean。

但我也需要使用注入(inject)服务的 .class 创建记录器。

有人知道怎么做吗?

Nathan,感谢重复标签和建议使用附加程序。

我的问题是我不能使用单元测试或没有 spring-context 的测试,因为我必须对两个数据库进行集成测试。

并且 spring 的测试不允许在不影响下一个测试的情况下在第一个测试中模拟记录器。

例子:



    @Service
    class MigrateDataService{
       @Autowired private FirstDB firstDB;
       @Autowired private SecondDB secondDB;

       Logger logger = LoggerFactory.getLogger(MigrateDataService.class);

       @Transactional(...)
       public void migrate(){

          Data data firstDB.getData();

          if(data.isWarn()){
                logger.warn("Data {} is warning", data);
          }

          secondDB.save(data);
       }
    }

我需要检测 logger.warn 调用。

谢谢...

最佳答案

这不是一个巧妙的方法,但它确实有效。

private void setLogger(Logger logger){
    this.logger = logger;
}

然后在您的测试代码中,将记录器设置为模拟记录器。

关于java - 在测试中模拟一个 Logger 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55300616/

相关文章:

java - 从 JDK 1.8.0.77 升级到 1.8.0.162 后 Jaxb2Marshaller 失败

java - 寻找一个框架/模式来处理特定数据集的更改

spring - 如何在每次单元测试后重置我的数据库状态而不使整个测试成为事务?

angular - 如何在 Angular 组件内提供/模拟 Angularfirestore 模块以通过默认测试?

android - Google Play alpha 发布进入生产阶段?

java - 使用 HTTP POST 将文件上传到 S3 存储桶

java - maven原型(prototype)中资源的相关路径

java - JRE HttpServer 是否违反了 HTTP 的 'expect-continue' 语义?

java - 如何将字符串数组的内容与字符串进行比较

javascript - Proxyquire找不到模块