Ich habe eine Conrtoller-Klasse, in der ich Details über aktuell angemeldeten Benutzer erhalte. Der Methodenname ist 'LoggedInUser()'. Die Methode läuft im Allgemeinen einwandfrei, aber ich kann keinen Einheitentestfall für eine bestimmte Methode erstellen.Mockito.when() funktioniert nicht richtig beim Spotten von Autowired-Objekt
Zum Testen verwende ich Mockito, aber 'Mockito.when()' funktioniert nicht richtig. Ich ging durch alle verwandten Fragen, aber nicht in der Lage, es zu lösen.
Folgendes ist, was ich bisher gemacht habe.
Controller.java
@Service
@Transactional
Public class Controller implements someInterface {
private LoggedInUser getUser(HttpServletRequest request) {
principal = request.getUserPrincipal();
Authentication tk = (Authentication) principal;
//Authentication tk = (Authentication)(request.getUserPrincipal());
LoggedInUser user = (LoggedInUser) tk.getPrincipal();
return user;
}
Die Zeile in Kommentar geschrieben, weil ich in einem anderen Beitrag gelesen, dass es nicht als ‚Haupt‘ arbeiten kann wieder instanziiert wird. Also habe ich versucht, es zu umgehen, aber das hat nicht so gut funktioniert.
Test.java
@Mock
private HttpServletRequest httpServletRequest;
public void tes() {
//httpServletRequest = Mockito.mock(HttpServletRequest.class);
Principal principal= Mockito.mock(Principal.class);
Mockito.when(httpServletRequest.getUserPrincipal()).thenReturn(principal);
.......
.......
}
Während des Debuggens, erhalte ich Wert für request (object of HttpServletRequest)
wie es in Controller-Klasse Autowired ist aber principal
ist immer null. Jede Hilfe wird geschätzt !!
Kommentar- der 1 Zeile in 'tes()' – ppasler
Ihre Mock Wirkung nicht, wenn die Referenz, die Sie zu spotten haben ist nicht belegt mit dem Wert des Scheines. Sie sollten den Code der getesteten Methode anzeigen. – davidxxx
Stellen Sie eine [mcve] bereit. – Tom