Quindi, sto creando un oggetto mock come variabile statica sul livello di classe in questo modo ... In un test, voglio Foo.someMethod()
per restituire un determinato valore, mentre in un altro test, voglio che restituisca un valore diverso . Il problema che sto avendo è che sembra che ho bisogno di ricostruire i mock per farlo funzionare correttamente. Mi piacerebbe evitare di ricostruire i mock e usare solo gli stessi oggetti in ogni test.Come dire a un oggetto mockito mockito di restituire qualcosa di diverso la prossima volta che viene chiamato?
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.
}
}
Nella seconda prova, sto ancora ricevendo 0 come valore quando testObj.bar() si chiama ... Qual è il modo migliore per risolvere questo? Nota che so che potrei usare un diverso simulato di Foo
in ogni test, tuttavia, devo concatenare più richieste su mockFoo
, il che significa che dovrei fare il concatenamento in ogni test.
Nizza . Non lo sapevo. – OliverS
Questo ha risolto la mia domanda, grazie Tony! – seanhodges
Penso che si possa anche sfruttare il fatto che .thenReturn() prende varargs, quindi il codice può essere abbreviato in: when (mockFoo.someMethod()). ThenReturn (0, 1, -1); –