【发布时间】:2017-05-23 12:38:12
【问题描述】:
我希望模拟对象在每个方法调用上返回不同的值。但是该方法没有参数。这是一个例子:
public class MyClass {
public double getValue() {
return 0;
}
}
public class IteratorClass {
MyClass myClass;
public IteratorClass(MyClass myClass) {
this.myClass = myClass;
}
public void iterate() {
for (int i = 0; i < 5; i++) {
System.out.println("myClass.getValue() = " + myClass.getValue());
}
}
}
public class IteratorClassTest {
private MyClass myClass;
private IteratorClass iteratorClass;
@Before
public void setUp() throws Exception {
myClass = mock(MyClass.class);
iteratorClass = spy(new IteratorClass(myClass));
}
@Test
public void testIterate() throws Exception {
when(myClass.getValue()).thenReturn(10d);
when(myClass.getValue()).thenReturn(20d);
when(myClass.getValue()).thenReturn(30d);
when(myClass.getValue()).thenReturn(40d);
when(myClass.getValue()).thenReturn(50d);
iteratorClass.iterate();
}
}
我在这里监视一个 IteratorClass 并嘲笑 MyClass。我希望 getValue() 方法在每次调用时返回不同的值。但它返回在模拟对象上设置的最后一个值。如果getValue()方法有getValue(int arg)这样的参数,那么可以根据参数返回不同的值。 (例如 getValue(0) -> 返回 10,getValue(1) -> 返回 20 等)。 但是方法没有参数怎么办?
【问题讨论】:
-
重复问题。这里也讨论过:stackoverflow.com/questions/8088179/…
-
@DmitryGorkovets 谢谢
标签: java unit-testing mockito