Je fais ce projet avec GWT et quand je fais le test Junit pour la méthode LogIn, j'obtiens une exception NullPointerException parce que je vérifie la session avec HttpServletRequest.Gwt Junit test HttpServletRequest Nullpointer
Voici le test Junit
private void checkLoginTest() {
UsersServiceImpl USI = new UsersServiceImpl();
UserDTO userDTO1 = new UserDTO();
UserDTO userDTO2 = new UserDTO();
User user1 = new User("username1", "password1", "email1",
"aa", "aa", "aa", "aa", UserRights.USER);
User user2 = new User("username2", "password2", "email2",
"aa", "aa", "aa", "aa", UserRights.USER);
userDTO1.setUser(user1);
userDTO2.setUser(user2);
UserDTO insertedUser1 = USI.register(userDTO1);
UserDTO insertedUser2 = USI.register(userDTO2);
/*
* Check login success
*/
Assert.assertNotNull(USI.checkLogin("username1", "password1"));
Assert.assertNotNull(USI.checkLogin("username2", "password2"));
//Wrong password below
Assert.assertNull(USI.checkLogin("username2", "ciaone"));
/*
* Check user returned by login
*/
/*Assert.assertEquals(user1.getUsername(), USI.checkLogin("username1", "password1"));
Assert.assertEquals(user2.getUsername(), USI.checkLogin("username2", "password2"));*/
}
Et voici la méthode checkLogin de UsersServiceImpl
public UserDTO checkLogin(String username, String password) {
// boolean check = false;
UserDTO checkedUser = new UserDTO();
mapDB.begin();
Map<String, User> userMap = mapDB.getDB().createTreeMap("UserMap")
.makeOrGet();
if (userMap.containsKey(username)) {
// Controllo se la password è corretta per quello username
checkedUser.setUser(userMap.get(username));
if (checkedUser.getUser().getPassword().equals(password)) {
// check = true;
checkedUser.setLogged(true);
// Salvo la sessione utente
storeUserInSession(checkedUser);
} else {
checkedUser.setUser(null);
}
} else {
checkedUser.setUser(null);
}
mapDB.end();
return checkedUser;
}
private void storeUserInSession(UserDTO user) {
HttpServletRequest httpServletRequest = this.getThreadLocalRequest();
HttpSession session = httpServletRequest.getSession(true);
session.setAttribute("user", user);
}
Le retour de storeUserInSession nul et je reçois le NullPointerException.
Comment puis-je éviter cela, ou comment puis-je appeler un HttpServletRequest pour une session dans le test Junit?
Ok changé la méthode storeUserInSession avec
private void storeUserInSession(UserDTO user) {
//Junit test ritorna NullPointerException
//In questo modo funziona
try {
HttpServletRequest httpServletRequest = this.getThreadLocalRequest();
HttpSession session = httpServletRequest.getSession(true);
session.setAttribute("user", user);
} catch (Exception e) {
System.err.println("Errore creazione HttpServeletRequest");
e.printStackTrace();
}
}
Ou peut être bien celui-ci aussi
private void storeUserInSession(UserDTO user) {
HttpServletRequest httpServletRequest = this.getThreadLocalRequest();
if(httpServletRequest != null){
HttpSession session = httpServletRequest.getSession(true);
session.setAttribute("user", user);
}
}
Je suis d'accord avec votre choix, 1 et 4. C'est un projet universitaire, je ne sais pas si je peux utiliser la méthode 3! Je vais essayer la méthode 1 et 4, et quand cela fonctionne je vais vérifier votre réponse ... si je reçois un problème continuer à poster ici ou ouvrir une autre question? (Qu'en penses-tu?) – Dario
Edité avec la solution! Merci pour le soutien! – Dario