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 Foo
w każdym teście, jednak muszę łączyć wiele żądań mockFoo
, co oznacza, że będę musiał wykonać łańcuch w każdym teście.