Also erstelle ich ein Scheinobjekt als 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 ich anscheinend die Mocks neu erstellen muss, damit dies richtig funktioniert. Ich möchte vermeiden, die Mocks neu zu erstellen, und in jedem Test dieselben Objekte verwenden.
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 erhalte ich immer noch 0 als Wert, wenn testObj.bar () aufgerufen wird ... Wie kann dies am besten behoben werden? Beachten Sie, dass ich weiß, dass ich Foo
in jedem Test ein anderes Modell verwenden kann. Ich muss jedoch mehrere Anforderungen mockFoo
verketten, was bedeutet, dass ich die Verkettung in jedem Test durchführen muss.