Bonjour,
Je suis entrain de faire mes tester unitaires sur une application Spring et là je bloque pour mes classes service.
En effet, celles-ci appel mes classe DAO et quand je Mock, je me tape un null pointer exception.
Voici ma classe de test;
Classe DAO:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 public class UserServiceImplTest { private UserServiceImplWebService UserServiceWebService = new UserServiceImplWebService(); @Autowired private IUserDao UserDao; private UserEntitie UserEntitie; @Before public void setUp() throws Exception { UserEntitie = EasyMock.createMock(UserEntitie.class); UserDao = EasyMock.createMock(IUserDao.class); } @Test public void enregistrerUser() throws EnregistrerUserException { Boolean retour; User User = new User(); User.setNom("Test"); User.setPrenom("Test"); EasyMock.expect(UserDao.enregistrerUser(UserEntitie)).andReturn(true); EasyMock.replay(UserDao); retour = UserServiceWebService.enregistrerUser(User); EasyMock.verify(UserDao); Assert.assertTrue(retour); } }
Classe Service à tester:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 public class UserDaoImpl implements IUserDao { @PersistenceContext private EntityManager entityManagerFactory; /** * */ public List<UserEntitie> listerUser() throws ListerUserException { List<UserEntitie> listeUsers = null; try { listeUsers = (List<UserEntitie>) entityManagerFactory .createQuery("FROM UserEntitie", UserEntitie.class).getResultList(); } catch (HibernateException e) { throw new ListerUserException(""); } return listeUsers; } /** * */ public UserEntitie recupererUser(int identifiant) throws RecupererUserException { UserEntitie UserEntite = null; try { UserEntite = (UserEntitie) entityManagerFactory.find(UserEntitie.class, identifiant); } catch (HibernateException e) { throw new RecupererUserException(""); } return UserEntite; } /** * */ public boolean enregistrerUser(UserEntitie User) throws EnregistrerUserException { boolean enregistrer = false; try { entityManagerFactory.persist(User); enregistrer = true; } catch (HibernateException e) { throw new EnregistrerUserException(""); } return enregistrer; } /** * */ public boolean modifierUser(UserEntitie User) throws ModifierUserException { boolean modifier = false; try { entityManagerFactory.merge(User); modifier = true; } catch (HibernateException e) { throw new ModifierUserException(""); } return modifier; } /** * */ public boolean supprimerUser(UserEntitie User) throws SupprimerUserException { boolean supprimer = false; try { entityManagerFactory.remove(entityManagerFactory.merge(User)); supprimer = true; } catch (HibernateException e) { throw new SupprimerUserException(""); } return supprimer; } }
Cela me proovque un null pointer exception sur enregistrer = UserDao.enregistrerUser(UserEntitie);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 public class UserServiceImplWebService implements IUserServiceWebService { @Autowired IUserDao UserDao; @Transactional(readOnly=true) public List<User> listerUser() throws ListerUserException { List<User> listeUsers = null; try { List<UserEntitie> listeUsersEntitie = UserDao.listerUser(); if (listeUsersEntitie.size() == 0) { throw new ListerUserException("Aucun Users trouvé !"); } else { listeUsers = new ArrayList<User>(); for (UserEntitie unUser : listeUsersEntitie) { User User = new User(); User.setIdentifiant(unUser.getIdentifiant()); User.setNom(unUser.getNom()); User.setPrenom(unUser.getPrenom()); listeUsers.add(User); } } } catch (CannotCreateTransactionException e) { throw new ListerUserException("Erreur d'accès à la base de données !"); } return listeUsers; } @Transactional(readOnly=true) public User recupererUser(int identifiant) throws RecupererUserException { User User = null; try { UserEntitie UserEntite = UserDao.recupererUser(identifiant); if (UserEntite == null) { throw new RecupererUserException( "Aucun Users trouvé pour l'identifiant choisit : " + identifiant + "!"); } else { User = new User(); User.setIdentifiant(UserEntite.getIdentifiant()); User.setPrenom(UserEntite.getPrenom()); User.setNom(UserEntite.getNom()); } } catch (CannotCreateTransactionException e) { throw new RecupererUserException("Erreur d'accès à la base de données !"); } return User; } @Transactional(readOnly=true) public boolean enregistrerUser(User User) throws EnregistrerUserException { boolean enregistrer = false; if (User.getNom() == null || User.getPrenom() == null) { throw new EnregistrerUserException( "Une ou plusieurs valeurs n'autorisent pas les valeurs nulles !"); } else { UserEntitie UserEntitie = new UserEntitie(); UserEntitie.setPrenom(User.getPrenom()); UserEntitie.setNom(User.getNom()); try { enregistrer = UserDao.enregistrerUser(UserEntitie); } catch (CannotCreateTransactionException e) { throw new EnregistrerUserException("Erreur d'accès à la base de données !"); } } return enregistrer; } @Transactional(readOnly=true) public boolean modifierUser(User User) throws ModifierUserException { boolean modifier = false; if (User.getNom() == null || User.getPrenom() == null) { throw new ModifierUserException( "Une ou plusieurs valeurs n'autorisent pas les valeurs nulles !"); } else { UserEntitie UserEntitie = new UserEntitie(); UserEntitie.setIdentifiant(User.getIdentifiant()); UserEntitie.setPrenom(User.getPrenom()); UserEntitie.setNom(User.getNom()); try { modifier = UserDao.modifierUser(UserEntitie); } catch (CannotCreateTransactionException e) { throw new ModifierUserException("Erreur d'accès à la base de données !"); } } return modifier; } @Transactional(readOnly=true) public boolean supprimerUser(User User) throws SupprimerUserException { boolean supprimer = false; if (User.getNom() == null || User.getPrenom() == null) { throw new SupprimerUserException( "Une ou plusieurs valeurs n'autorisent pas les valeurs nulles !"); } else { UserEntitie UserEntitie = new UserEntitie(); UserEntitie.setIdentifiant(User.getIdentifiant()); UserEntitie.setPrenom(User.getPrenom()); UserEntitie.setNom(User.getNom()); try { supprimer = UserDao.supprimerUser(UserEntitie); } catch (CannotCreateTransactionException e) { throw new SupprimerUserException("Erreur d'accès à la base de données !"); } } return supprimer; } }
J'ai l'impression que c'est à cause de EntityManagerFactory qui est null dans la DAO mais comme je mock la DAO, je suis pas censé avoir de problème. Je ne souhaite pas avoir de contact avec la bd quand je test ma classe service si j'ai bien compris le système de mock
Merci de votre aide
Partager