为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确使用 DoThrow()

如何正确使用 DoThrow()

有只小跳蛙 2023-05-24 16:27:41
目前刚刚开始单元测试,所以我有两个关于这个问题中这个错误的问题,我希望它没问题。我有一个类有一个正面测试和三个负面测试,其中一个负面案例是使用 doThrow 来模拟失败的存储库,但它也会导致正面测试失败,有什么办法可以解决这个问题吗?理想情况下,负例和正例是否必须分为两类?我已经在谷歌上搜索过这个但找不到任何参考,甚至找不到与我相同的问题,已经在不和谐中询问,虽然我确实找到了一些修复方法,通过为负面的 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 ;预期的结果是所有测试用例都应该运行,但我得到一个错误,并且只跟踪一行,这com.project.common.exception.DAOException 是代码的正例部分。
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

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

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


查看完整回答
反对 回复 2023-05-24
?
交互式爱情

TA贡献1712条经验 获得超3个赞

所以再试一次,经过一些调试,由于某种原因我的否定案例在肯定案例之前运行,幸运的是 junit 有顺序注释,因为我使用 JUnit 4,我使用基于类名的顺序,但是如果你使用 Junit 5 ,您可以使用按数字排序,例如@Order(1),它现在按预期工作

需要说明的是,由于某种原因每次解决@Before和重置模拟都不起作用,即使从技术上讲它应该起作用


查看完整回答
反对 回复 2023-05-24
  • 2 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信