Chcę przetestować mój kontroler mvc wiosny.W jaki sposób używasz wtrysku sprężyny do testowania jednostki kontrolera?
Sterownik posiada usługę:
@Autowired
UserService userService
A mój serwis użytkownika zależy (autowired) moja UserDao i inne usługi, takie jak MongoDB itp
Teraz chcę logika biznesowa być badane w my UserService, ale oczywiście chciałbym kpić z odpowiedzi z mojego UserDao i Mongodb itp.
Jak poprawnie skonfigurować test jednostki?
Czy mogę ponownie użyć pliku xml kontenera ze sprężyną, który ma wszystkie moje fasolki itp. Lub czy mogę utworzyć nowy? (Zakładam, że muszę wziąć tutaj udział pojemnik sprężyny)
Szukasz wskazówek na ten temat, wszelkie tutoriale byłyby bardzo mile widziane.
Aktualizacja
Co znajdę dziwne jest to, że dla mojego kontrolera sprężyny (który nie realizuje od kontrolera) byłem w stanie uzyskać dostęp do mojej prywatnej varialbe ręcznie ustawić moją usługę, a mianowicie:
@Controller
public class UserController {
@Autowired
UserService userService;
}
I w moim badanej jednostki mogłem zrobić:
UserController controller = new UserController();
controller.userService = ....
Ale dla mojego UserService, który ma UserDao autowired, nie mogę uzyskać dostępu Właściwość userDao:
UserService userService = new UserServiceImpl();
userService.userDao = .... // not available
Ma to sens, ponieważ jest prywatne, ale jak to działa dla mojego kontrolera?
Odp: zaktualizuj, jakie pakiety są kontrolerem, usługą i testami? Jeśli test jest w tym samym pakiecie, może uzyskać dostęp do właściwości o domyślnym zakresie. Pominięcie modyfikatora dostępu * nie * powoduje, że właściwość jest prywatna, raczej [pakiet-prywatny] (http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html). –
Mam je w tej samej paczce. Ach, rozumiem, założyłem, że to było prywatne. Zastanawiam się, dlaczego IntelliJ podczas refaktora domyślnie tworzy pola prywatne. Więc powinienem zachować je jako pakiet prywatny? – Blankman
Nie ma "powinien", to po prostu zależy. Moja jedyna troska związana z pakietami prywatnymi polega na tym, że nadal możesz uzyskać dostęp do czegoś nieumyślnie; Wolę zachować prywatność i używać seterów, ale meh. –