最佳答案
因此,我在类级别上创建一个模拟对象作为静态变量,就像这样……在一个测试中,我希望Foo.someMethod()
返回某个值,而在另一个测试中,我希望它返回不同的值。我遇到的问题是,似乎我需要重新构建模拟,以使其正确工作。我希望避免重新构建模拟,而只是在每个测试中使用相同的对象。
class TestClass {
private static Foo mockFoo;
@BeforeClass
public static void setUp() {
mockFoo = mock(Foo.class);
}
@Test
public void test1() {
when(mockFoo.someMethod()).thenReturn(0);
TestObject testObj = new TestObject(mockFoo);
testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value
}
@Test
public void test2() {
when(mockFoo.someMethod()).thenReturn(1);
TestObject testObj = new TestObject(mockFoo);
testObj.bar(); // calls mockFoo.someMethod(), STILL receiving 0 as the value, instead of expected 1.
}
}
在第二个测试中,当testObj.bar()被调用时,我仍然收到0作为值…解决这个问题的最好方法是什么?注意,我知道我可以在每个测试中使用不同的Foo
模拟,但是,我必须从mockFoo
中链接多个请求,这意味着我必须在每个测试中进行链接。