在测试中模拟Logger类

时间:2019-03-22 13:24:37

标签: java spring testing mockito slf4j

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

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

但是我也需要使用注入的Service的.class创建记录器。

有人知道该怎么做吗?

内森,感谢重复的标签和“ suppliuse”附加器。

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

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呼叫。

谢谢...

1 个答案:

答案 0 :(得分:0)

这不是一个巧妙的方法,但是它可行。

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

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