首页 > 解决方案 > 在junit中模拟DAO层中的特定方法

问题描述

我有一个带有 rest api 端点的应用程序。我想为此编写测试用例。它遵循 MVC 架构。对于其中一个端点,我想在我的 DAO 类中模拟一个方法。

我的测试类的示例代码是:

RequestBuilder requestGetBuilder = MockMvcRequestBuilders
                .get("/processcal/getdata/srn/{srn}",1000)
                .contentType(MediaType.APPLICATION_JSON)
                .accept(MediaType.APPLICATION_JSON);

该控制器将调用具有该方法的 DAO 层进行模拟。我尝试在我的测试配置类中使用如下模拟:

    @Bean
    @Primary
    BookMarkDao bookMarkDao() {
        final BookMarkDao bookMarkDao = Mockito.mock(BookMarkDao.class);
        Mockito.when(bookMarkDao.fetchMrPostProcessCalc(Mockito.anyString()))
                .thenReturn(TestUtils.getMockResponse());
        return bookMarkDao;
    }

这样做的问题是它在模拟整个 DAO bean,因此对于其他端点,它不调用 DAO 类方法,并且我的测试覆盖率降低了。有没有办法解决这个问题?

标签: junitmockitojunit4spring-testspring-test-mvc

解决方案


您可以为模拟 bean 使用特定配置文件,并在必要的测试用例中激活此配置文件。顺便说一句,如果您的应用程序基于 spring-boot,那么您可以使用 @MockBean 而不是在测试配置中手动模拟您的 DAO。


推荐阅读