So erstellen ich ein Mock-Objekt als eine statische Variable auf Klassenebene wie folgt ... In einem Test möchte ich Foo.someMethod()
einen bestimmten Wert zurückgeben, während ich in einem anderen Test möchte, dass es einen anderen Wert zurückgibt . Das Problem, das ich habe, ist, dass es scheint, dass ich die Mocks neu aufbauen muss, damit dies richtig funktioniert. Ich möchte es vermeiden, die Mocks neu aufzubauen, und benutze einfach die gleichen Objekte in jedem Test.Wie kann man einem Mockito-Mock-Objekt sagen, dass es beim nächsten Aufruf etwas anderes zurückgibt?
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.
}
}
Im zweiten Test, bin ich immer noch empfangen 0 als Wert, wenn testObj.bar() aufgerufen wird ... Was ist der beste Weg, dies zu lösen? Beachten Sie, dass ich weiß, dass ich einen anderen Mock von Foo
in jedem Test verwenden könnte, jedoch muss ich mehrere Anfragen von mockFoo
verketten, was bedeutet, dass ich die Verkettung in jedem Test durchführen müsste.
Nizza . Wusste das nicht. – OliverS
Das hat meine Frage gelöst, danke Tony! – seanhodges
Ich denke, Sie können auch die Tatsache nutzen, dass .thenReturn() varargs verwendet, so dass der Code wie folgt verkürzt werden kann: when (mockFoo.someMethod()). ThenReturn (0, 1, -1); –