gpt4 book ai didi

java - 如何在每次调用时更改没有参数的模拟方法的返回值?

转载 作者:行者123 更新时间:2023-11-30 07:57:09 25 4
gpt4 key购买 nike

我希望模拟对象在每次方法调用时返回不同的值。但是该方法没有参数。这是一个例子:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com