首页 > 解决方案 > 如何正确使用 DoThrow()

问题描述

目前刚开始单元测试,所以我在这个问题中有两个关于这个错误的问题,我希望它没问题。

  1. 我有一个类有一个正面测试和三个负面测试,其中一个负面案例是使用 doThrow 来模拟失败的存储库,但它也会导致正面测试失败,有没有办法解决这个问题?

  2. 理想情况下,是否必须将负例和正例分为两类?

我已经对此进行了谷歌搜索,但找不到任何参考,甚至找不到与我相同的问题,已经问过不和谐问题,虽然我确实找到了一些解决方法,通过为负 doThrow 案例创建新类,但我正在寻找补充意见。

这是否定情况的示例

@Test(expected = DAOException.class)
    public void testFail() throws ObjectNotEncypted, ObjectNotFound {
        List<Long> ids = new ArrayList<Long>();
        ids.add(id);

        Mockito.when(tempRepo.tempfunction(var)).thenReturn(Optional.of(expectedvalue));
        Mockito.when(tempRepo.tempfunction(var)).thenReturn(expectedvalue);
        Mockito.when(tempRepo.tempfunction(var)).thenReturn(null);
        Mockito.when(tempRepo.tempfunction(var)).thenReturn(1);
        Mockito.when(tempRepo.tempfunction(var)).thenReturn(1);
        Mockito.doThrow(DAOException.class).when(tempRepo).tempfunctionthatshouldfail(var);

        service.dofunction(ids);
    }

-- 附加代码这里是我如何构造配置和声明变量

@Configuration
    static class classConfig {
        @Bean
        public service accountService() {
            return new serviceImpl();
        }

        @Bean
        public TempRepo tempRepo () {
            return Mockito.mock(TempRepo.class);
        }
}

@Autowired
    private Service service;

    @Autowired
    private TempRepo tempRepo ;

预期的结果是所有测试用例都应该运行,但我遇到了一个错误,并且跟踪只有一行,它的 thiscom.project.common.exception.DAOException 和 this 是代码的肯定用例部分。

先感谢您

标签: javaunit-testingjunit

解决方案


我注意到你tempRepo是一个全局变量,你试过调用Mockito.reset(tempRepo);吗?

以及如何初始化tempRepo模拟?使用注解@Mock或在构造函数中通过Mockito.mock(Repo.class)?

或者你能在这里分享你的测试课吗?


推荐阅读