Voglio testare il mio controller mvc a molla.Come si usa l'iniezione a molla per l'unità che testa un controller?
Il controller dispone di un servizio:
@Autowired
UserService userService
E il mio servizio per l'utente dipende (autowired) il mio UserDao e alcuni altri servizi come MongoDB ecc
Ora voglio la logica di business per essere testato in il mio UserService, ma naturalmente voglio prendere in giro le risposte dal mio UserDao e da Mongodb, ecc.
Come si configura correttamente il test dell'unità?
Posso riutilizzare il file xml del contenitore primavera che contiene tutti i miei bean ecc. Oppure ne creo uno nuovo? (presumo che debba coinvolgere il contenitore della molla qui)
In cerca di indicazioni su questo, qualsiasi tutorial sarebbe molto apprezzato.
Aggiornamento
Quello che trovo strano è che per il mio controller di primavera (che non implementa dal Controller) sono stato in grado di accedere al mio varialbe privato a impostare manualmente il mio servizio, vale a dire:
@Controller
public class UserController {
@Autowired
UserService userService;
}
E nel mio test di unità che potevo fare:
UserController controller = new UserController();
controller.userService = ....
Ma per il mio UserService, che ha UserDao autowired, io non può accedere la proprietà userDao:
UserService userService = new UserServiceImpl();
userService.userDao = .... // not available
Ha senso poiché è privato, ma come funziona per il mio controller?
Re: aggiornamento, quali pacchetti sono i controller, di servizio e test in? Se il test si trova nello stesso pacchetto, può accedere alle proprietà con ambito predefinito. L'omissione di un modificatore di accesso * non * fare una proprietà privata, piuttosto [pacchetto-privato] (http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html). –
Li ho nello stesso pacchetto. Ah, capisco, ho pensato che fosse privato. Mi chiedevo perché IntelliJ durante un refactatore rende i campi privati per impostazione predefinita. Quindi dovrei tenerli come pacchetto privato allora? – Blankman
Non c'è "dovrebbe", dipende solo. La mia unica preoccupazione con package-private è che potresti ancora accedere a qualcosa in modo non intenzionale; Io preferisco mantenere le cose private e usare setter, ma meh. –