【发布时间】:2019-12-06 16:25:44
【问题描述】:
我正在向与此类似的大型代码库添加测试:
public class MyTests{
@Mock
private DBService dbService;
@Before
public void init(){
Mockito.when(dbService.getFromDb).thenReturn(getReturnResult());
}
}
getReturnResults() 在哪里得到一些假数据。在 99% 的情况下,这是我想要的实现,但是在测试异常时,我想做这样的事情:
@Test
public void useDifferentDBResults(){
Mockito.when(dbService.getFromDb).thenReturn(getDifferentReturnResult());
...
}
getDifferentReturnResult() 获取一些不同的数据会导致错误。我只需要替换这个测试的实现即可。
【问题讨论】:
-
也许您应该将
Mockito.when(dbService.getFromDb).thenReturn(getReturnResult());移出init方法并将其复制到每个需要它的测试中。然后你可以在你的新测试方法中定义你自己的Mockito.when(dbService.getFromDb).thenReturn(getDifferentReturnResult());。 -
@D.Lawrence 我特别想避免这样做,如果没有其他选项可用,我会这样做。
-
如果将方法保留在 init 中并在方法中定义
Mockito.when(dbService.getFromDb).thenReturn(getDifferentReturnResult()),它将模拟对该方法的第二次调用。我觉得这也不是你想要做的。 -
@D.Lawrence 不幸的是,这不适用于我的场景,因为我希望所有调用都返回这些不同的信息。看起来不使用 init 是最简单的。
-
除了我当时提到的解决方案之外,我没有任何其他解决方案。
标签: spring unit-testing junit mocking mockito