private mockedObject cpMock;
@Test
public void test() {
Manager managerTest = new Manager(cpMock, size);
Instance instance = new Instance(size);
when(cpMock.requestInstance()).thenReturn(instance);
}
答案 0 :(得分:3)
thenReturn
有一个重载,它有一个var-arg参数:
when(cpMock.requestInstance())
.thenReturn(instance, instance1, instance2, instance3);
根据其javadocs,它将按此顺序返回这些对象。从第4次调用开始,将返回instance3
(最后一个值):
设置调用该方法时要返回的连续返回值。例如:
when(mock.someMethod()).thenReturn(1, 2, 3);
序列中的最后一个返回值(例如3)确定了进一步连续调用的行为。
答案 1 :(得分:0)
thenReturn
很好。如果您想在每次调用方法时模拟一个实例以做某事,那么正确的解决方案是Answer(与thenAnswer
或{{1一起传递}}),它是一种与Java 8配合使用的单方法接口。您可以使用其InvocationOnMock参数获取有关调用(包括其参数)的详细信息,并且doAnswer
的返回值将充当方法的返回值。
当您需要调用具有副作用(例如修改其参数或调用回调函数)时,这也是一个很好的解决方案。
Answer.answer
没有lambdas,调用会更加冗长一些,但还算不错:
when(cpMock.requestInstance()).thenAnswer(invocation => new Instance(size));