现在我有一种使用 Mockito 进行测试的方法。不过方法有点复杂。在同样的方法中,我需要新建两个相同类型的对象。
Timestamp beginTimestamp = new Timestamp(Long.parseLong(beginTimeLong));
Timestamp endTimestamp = new Timestamp(System.currentTimeMillis());
我想模拟第二个对象 endTimestamp
来抛出 Exception
,但我无法避免 beginTimestamp
的影响。现在我的问题是如何仅模拟第二个对象 endTimeStamp
,并使其在调用 endTimestamp
的某些方法时抛出异常,例如:
endTimestamp.getTime()
我尝试编写如下所示的测试代码,
@Ignore
public void getSynPotentialShopBeginTimeAndEndTest4() throws Exception {
Timestamp beginTimestamp = PowerMockito.mock(Timestamp.class);
Timestamp endTimestamp = PowerMockito.mock(Timestamp.class);
PowerMockito.whenNew(Timestamp.class).withAnyArguments().thenReturn(beginTimestamp).thenReturn(endTimestamp);
when(endTimestamp.getTime()).thenThrow(RuntimeException.class);
redisService.getSynPotentialShopBeginTimeAndEnd();
}
这也不起作用。这些代码没有任何红色波浪下划线,但是当我尝试运行它时,出现了如下异常:
org.mockito.exceptions.base.MockitoException:
Incorrect use of API detected here:
You probably stored a reference to `OngoingStubbing` returned by `when()` and called stubbing methods like `thenReturn()` on this reference more than once.
Examples of correct usage:
when(mock.isOk()).thenReturn(true).thenReturn(false).thenThrow(exception);
when(mock.isOk()).thenReturn(true, false).thenThrow(exception);
还有其他解决方案可以解决我的问题吗?不管怎样,只要问题解决了就可以了。
最佳答案
试试这个
PowerMockito.whenNew(Timestamp.class).withAnyArguments().thenReturn(beginTimestamp,endTimestamp);
而不是PowerMockito.whenNew(Timestamp.class).withAnyArguments().thenReturn(beginTimestamp).thenReturn(endTimestamp);
关于java - 如何在同一方法中模拟第二个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41331370/