Nel consiglio di Mockito su come scrivere buoni test, è scritto che non dovremmo prendere in giro oggetti di valore ( link ). Dicono anche
Because instantiating the object is too painful !? => not a valid reason.
Ma non capisco. E se davvero non ci importa cosa contenga quell'oggetto? Diciamo solo che ho una classe di oggetti valore "Foo" che non ha costruttori semplici (ha un costruttore di tutti gli argomenti e contiene oggetti che hanno anche bisogno di costruttori all-args). Diciamo anche che ho il seguente servizio:
public class MyService {
private SomeService someService;
private OtherService otherService;
public void myAwesomeMethod() {
Foo foo = someService.getFoo();
someOtherService.doStuff(foo);
}
}
E ho bisogno di testare quel metodo. Chiaramente qui non mi interessa cosa contenga foo perché lo passo semplicemente a un altro metodo. Se voglio testarlo, dovrei davvero creare un oggetto foo con costruttori / builder nidificati? Per me sarebbe davvero facile prendere in giro foo
anche se si tratta di un POJO:
public class MyServiceTest {
@InjectMocks
MyService myService;
@Mock
private SomeService someService;
@Mock
private OtherService otherService;
@Test
public void testMyAwesomeMethod() {
Foo mockedFoo = Mockito.mock(Foo.class);
Mockito.when(someService.getFoo()).thenReturn(mockedFoo);
Mockito.verify(otherService).doStuff(mockedFoo);
}
}
Ma allora non rispetterebbe le linee guida date da Mockito. C'è un'altra alternativa?