Qual è la differenza tra queste due dichiarazioni in mockito?Differenza tra Mockito @Spy e @Mock (answer = Answers.CALLS_REAL_METHODS)
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
Qual è la differenza tra queste due dichiarazioni in mockito?Differenza tra Mockito @Spy e @Mock (answer = Answers.CALLS_REAL_METHODS)
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
L'ex stile CALLS_REAL_METHODS crea un oggetto non inizializzato; nessun costruttore viene eseguito e nessun campo è impostato. Generalmente questa sintassi non è sicura, poiché le implementazioni reali interagiranno con i campi non inizializzati che potrebbero costituire uno stato non valido o impossibile.
Il secondo stile @Spy consente di chiamare un costruttore di propria scelta, oppure Mockito effettuerà il try to call a no-arg constructor if the field is uninitialized. I campi vengono quindi copiati in una Spia generata (che estende il tipo spiato), consentendo interazioni molto più sicure e più realistiche.
Requisite promemoria: fare collezioni di Java non addirittura finto di fuori di esempi di giocattoli, e non dimenticare di utilizzare doReturn
sintassi quando si esegue l'override spie e CALLS_REAL_METHOD prende in giro, altrimenti si chiamerà il metodo vero e proprio all'interno della chiamata when
.