Ho un metodo AuthenticationManager.authenticate(username,password)
che viene chiamato in alcuni Metodi di un SomeService sotto test. AuthenticationManager viene iniettato in SomeService:
@Component
public class SomeService {
@Inject
private AuthenticationManager authenticationManager;
public void someMethod() {
authenticationManager.authenticate(username, password);
// do more stuff that I want to test
}
}
Ora per il test unitario ho bisogno del metodo di autenticazione per far finta che funzioni correttamente, nel mio caso non fare nulla, quindi posso verificare se il metodo stesso fa il lavoro previsto (l'autenticazione viene testata altrove in base ai principi di test unitario, tuttavia l'autenticazione deve essere chiamata all'interno di quel metodo)
Quindi sto pensando, ho bisogno di SomeService
per usare un% di battuta% co_de che verrà restituito e non fare nient'altro quando AuthenticationManager
viene chiamato da authenticate()
. Come faccio a farlo con PowerMock (o EasyMock / Mockito, che fanno parte di PowerMock)?
O c'è un altro modo per dire a Spring di usare un po 'di Mock invece del vero affare, quando si fa l'injeeting del someMethod()
in AuthenticationManager
?
O il mio disegno è sbagliato?
Grazie!
Modifica: trova una soluzione, vorrebbe sentire commenti
Quindi ho trovato un buon modo per iniettare una simulazione senza dover usare un setter o un livello di pacchetto:
@RunWith(PowerMockRunner.class)
public class TestOrderService {
@Mock
private AuthenticationManager authenticationManager;
@InjectMocks
private OrderService orderService = new OrderService();
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
Mockito.doNothing().when(this.authenticationManager).authenticate(null, null);
}
@Test
public void testOrderService() {
orderService.save(null, null, null);
}
}
con OrderService come questo:
public void save(String username, Order order) {
authenticationManager.authenticate(username, password);
// do something with the order...
}
Ora il metodo di salvataggio chiamerà l'autenticazione sul mock e il mock non mi lascia libero di testare il lavoro effettivo all'interno del mio metodo di servizio (che in realtà sta chiamando un metodo manager ma non era quello il punto;))