如何告诉Mockito模拟对象在下次调用时返回不同的内容?

因此,我正在像这样在类级别上将模拟对象创建为静态变量…在一个测试中,我想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,这意味着我必须在每个测试中进行链接。

回答:

首先,不要使模拟静态。将其设为私有字段。只需将您的setUp类放在@Beforenot中@BeforeClass。它可能会运行很多,但是很便宜。

其次,您现在拥有的方式是获取模拟以根据测试返回不同内容的正确方法。

以上是 如何告诉Mockito模拟对象在下次调用时返回不同的内容? 的全部内容, 来源链接: utcz.com/qa/415414.html

回到顶部