Scrivo test di unità per livello di servizio nella mia applicazione di molla.
Qui è la mia classe di servizioTest unitari con Mockito
@Service
public class StubRequestService implements RequestService {
@Autowired
private RequestDao requestDao;
@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
@Override
public Request getRequest(Long RequestId) {
Request dataRequest = requestDao.find(requestId);
return dataRequest;
}
}
Qui è la mia classe di test
@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(locations = { "/META-INF/spring/applicationContext.xml" })
public class StubRequestServiceTest {
@Mock
public RequestDao requestDao;
StubRequestService stubRequestService; // How can we Autowire this ?
@org.junit.Before
public void init() {
stubRequestService = new StubRequestService(); // to avoid this
stubRequestService.setRequestDao(dataRequestDao);
// Is it necessary to explicitly set all autowired elements ?
// If I comment/remove above setter then I get nullPointerException
}
@Test
public void testGetRequest() {
Request request = new Request();
request.setPatientCnt("3");
when(requestDao.find(anyLong())).thenReturn(request);
assertEquals(stubRequestService.getRequest(1234L).getPatientCnt(),3);
}
}
il suo bel lavoro, ma ho alcune domande
- Come possiamo
Autowire
classe di servizio in test? Sto usando il costruttore nel metodoinit()
per creare l'oggetto servizio. - Dobbiamo impostare tutto l'elemento
Autowire
per la classe di servizio? Per l'exStubRequestService
è stato attivato automaticamenteRequestDao
che ho bisogno di impostare in modo esplicito prima di chiamare il metodo di prova altrimenti ha datonullPointerException
comerequestDao
ènull
nel metodoStubRequestService.getRequest
. - Quali sono le buone pratiche da seguire durante il collaudo unitario del livello di servizio Spring? (Se sto facendo qualcosa di sbagliato).
Se si cambia la tua domanda dopo che le risposte sono date, le risposte non fanno più molto senso. Ritirerò la tua ultima modifica. –
@ JB: scuse per la modifica della domanda. Volevo solo fornire informazioni corrette e precise. Grazie – xyz