Utilisation des Mock au sein d'une application Spring
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;
Code:
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 DAO:
Code:
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;
}
} |
Classe Service à tester:
Code:
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;
}
} |
Cela me proovque un null pointer exception sur enregistrer = UserDao.enregistrerUser(UserEntitie);
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