首页 > 解决方案 > 使用日志消息编写 junit 测试用例而不使用 mockito

问题描述

我有一个spring boot应用程序,我想为void方法编写一个junit测试用例,所以我只想测试日志是否包含特定消息。以下是我的业务逻辑类:

public void processAdjustmentFeed(){

        ............

        if(!CollectionUtils.isEmpty(adjustmentList)){
            log.info("ADJUSTMENT FEED SIZE TO PUBLISH: {}", adjustmentList.size());
            // SOME BUSINESS LOGIC
        } else {
            log.warn("NO ADJUSTMENT FEED FOUND TO PROCESS FROM : {}", lastSuccessfulQueriedTimeStamp);
        }
    }

在我的测试课上:

@RunWith(SpringRunner.class)
@SpringBootTest
public class AdjustmentSchedulerTest {
//
    @Autowired
    private AdjustmentScheduler adjustmentScheduler;

    @Autowired
    private AdjustmentRepository adjustmentRepository;

    @Autowired
    private AdjustmentService adjustmentService;



    @Test
    public void processAdjustmentFeed_ValidAdjustmentList() 
    {

        ....

        adjustmentScheduler.processAdjustmentFeed();

        //HERE I NEED TO CHECK FOR THE LOG MESSAGE
    }
}

不使用 mockito 怎么办,因为我使用的是 H2 数据库,我想用实际方法进行测试。谁能给我一些代码示例来做到这一点。

标签: javaspring-bootjunitslf4j

解决方案


您应该专注于测试// SOME BUSINESS LOGIC而不是logger. 测试日志使您的测试紧密耦合,您最终会测试已经测试过的记录器代码。这不符合单元测试原则

无论如何,如果您真的不想使用mockito,您可以随时编写自己的appender日志消息经过的地方。

例如,请参阅此。


推荐阅读