作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望模拟对象在每次方法调用时返回不同的值。但是该方法没有参数。这是一个例子:
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 等)。但是当方法没有参数时怎么办?
最佳答案
您可以将连续的返回值指定为链式方法调用(也称为流畅的 API):
@Test
public void testIterate() throws Exception {
when(myClass.getValue()).thenReturn(10d)
.thenReturn(20d)
.thenReturn(30d)
.thenReturn(40d)
.thenReturn(50d);
iteratorClass.iterate();
}
或作为 VarAgs:
@Test
public void testIterate() throws Exception {
when(myClass.getValue()).thenReturn(10d,20d,30d,40d,50d);
iteratorClass.iterate();
}
无论哪种方式,最后一个都将被重新调整以供对该方法的任何进一步调用。
关于java - 如何在每次调用时更改没有参数的模拟方法的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41544840/
我是一名优秀的程序员,十分优秀!