Tak więc tworzę próbny obiekt jako zmienną statyczną na poziomie klasy, tak jak ... W jednym teście chcę Foo.someMethod()zwrócić określoną wartość, podczas gdy w innym teście chcę, aby zwróciła inną wartość. Problem, który mam, polega na tym, że wydaje się, że muszę odbudować symulacje, aby działało poprawnie. Chciałbym uniknąć przebudowy prób i po prostu używać tych samych obiektów w każdym teście.
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.
}
}
W drugim teście nadal otrzymuję 0 jako wartość, gdy wywoływana jest metoda testObj.bar () ... Jaki jest najlepszy sposób na rozwiązanie tego problemu? Zauważ, że wiem, że mógłbym użyć innej makiety Foow każdym teście, jednak muszę łączyć wiele żądań mockFoo, co oznacza, że będę musiał wykonać łańcuch w każdym teście.