【问题标题】:Mock a particular method in DAO layer in junit在junit中模拟DAO层中的特定方法
【发布时间】:2019-11-15 20:15:25
【问题描述】:

我有一个带有 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 类方法,并且我的测试覆盖率降低了。有没有办法解决这个问题?

【问题讨论】:

  • 我不认为你的控制器类的覆盖应该对 DAO 类调用有任何依赖,因为单元测试只测试类中存在的一段代码。
  • 你能分享你的测试类文件吗?

标签: junit mockito junit4 spring-test spring-test-mvc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多