IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tests et Performance Java Discussion :

tester une metode void


Sujet :

Tests et Performance Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 47
    Par défaut tester une metode void
    salut ,
    j`ai un projet a faire qui utilise les technologies : Spring, SpringMVC, Hibernate ,JSP. Dans ce projet il faut faire les tests unitaires de chaque méthode même celle des objets persistants. Mon problème c`est que j`arrive pas a tester une méthode de type void grâce a junit , j`ai cherché sur le net mais j`ai rien trouvé.

    voici un exemple
    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
     
    package com.proxymit.grh.dao.impl;
     
    import java.util.List;
     
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.hibernate.SessionFactory;
    import org.springframework.orm.hibernate3.HibernateTemplate;
     
    import com.proxymit.grh.dao.EmployeesDAO;
    import com.proxymit.grh.domain.Employees;
     
    public class EmployeesDAOimpl implements EmployeesDAO {
     
    	private HibernateTemplate hibernateTemplate;
    	 protected final Log logger = LogFactory.getLog(getClass());
     
    	public void setSessionFactory(SessionFactory sessionFactory) {
    		this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    	}
     
     
    	@Override
    	public void createEmploye(Employees employe, boolean verif) {
    		if (verif = true )
    		{
    			hibernateTemplate.save(employe);
    		}
    		else 
    		{
    			//System.out.println(" impossible de faire cette action");
    			logger.info(" impossible de faire cette action");
    		}
    	}
     
    	@Override
    	public void editEmploye(Employees employe, boolean verif) {
    		if (verif = true )
    		{
    			hibernateTemplate.update(employe);
    		}
    		else 
    		{
    			//System.out.println(" impossible de faire cette action");
    			logger.info(" impossible de faire cette action");
    		}
     
    	}
     
    	@Override
    	public Employees findEmploye(Object id, boolean verif) {
    		if (verif= true)
    		{
    			 return (Employees)hibernateTemplate.find("select firstame,lastname from Employees where idemployes ="+id);
     
    		}
    		else 
    		{
    			logger.info("impossible de trouver l`employe");
     
    			return null ;
    		}
    	}
     
    	@Override
    	@SuppressWarnings("unchecked")
    	public List<Employees> findallEmploye(boolean verif) {
    		if ( verif = true )
    		{
    			return hibernateTemplate.find("from Employees");
     
    		}
    		else 
    		{
    			logger.info("impossible de trouver la liste des employees");
     
    			return null ;
    		}
     
    	}
     
    	@Override
    	public void removeEmploye(Employees employe, boolean verif) {
     
    		if ( verif = true )
    		{
    			hibernateTemplate.delete(employe);
    		}
    		else 
    			logger.info(" impossible de faire cette action");
    		//System.out.println(" impossible de faire cette tache");
     
    	}
     
    }
    et la classe Employees
    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
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
     
    package com.proxymit.grh.domain;
     
     
    import java.util.HashSet;
    import java.util.Set;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import static javax.persistence.GenerationType.IDENTITY;
     
    import javax.persistence.CascadeType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
     
    /**
     * Employees generated by hbm2java
     */
    @Entity
    @Table(name = "employees", catalog = "proxym_data_base")
    public class Employees implements java.io.Serializable {
     
    	/**
             * 
             */
    	public static final long serialVersionUID = 1L;
    	public Integer idemployees;
    	public Employees employees;
    	public String firstame;
    	public String lastname;
    	public String mail;
    	public String function;
    	public String sheet;
    	public Integer rib;
    	public String maritalStatus;
    	public Integer numberOfChildren;
    	public String password;
    	public Set<Adressemployes> adressemployeses = new HashSet<Adressemployes>(
    			0);
    	public Set<Vacation> vacations = new HashSet<Vacation>(0);
    	public Set<Trainee> trainees = new HashSet<Trainee>(0);
    	public Set<Phoneemployees> phoneemployeeses = new HashSet<Phoneemployees>(
    			0);
    	public Set<Rules> ruleses = new HashSet<Rules>(0);
    	public Set<Salary> salaries = new HashSet<Salary>(0);
    	public Set<Cv> cvs = new HashSet<Cv>(0);
    	public Set<Employees> employeeses = new HashSet<Employees>(0);
     
    	public Employees() {
    	}
     
    	public Employees(String firstame, String lastname, String mail,
    			String function) {
    		this.firstame = firstame;
    		this.lastname = lastname;
    		this.mail = mail;
    		this.function = function;
    	}
     
    	public Employees(Employees employees, String firstame, String lastname,
    			String mail, String function, String sheet, Integer rib,
    			String maritalStatus, Integer numberOfChildren, String password,
    			Set<Adressemployes> adressemployeses, Set<Vacation> vacations,
    			Set<Trainee> trainees, Set<Phoneemployees> phoneemployeeses,
    			Set<Rules> ruleses, Set<Salary> salaries, Set<Cv> cvs,
    			Set<Employees> employeeses) {
    		this.employees = employees;
    		this.firstame = firstame;
    		this.lastname = lastname;
    		this.mail = mail;
    		this.function = function;
    		this.sheet = sheet;
    		this.rib = rib;
    		this.maritalStatus = maritalStatus;
    		this.numberOfChildren = numberOfChildren;
    		this.password = password;
    		this.adressemployeses = adressemployeses;
    		this.vacations = vacations;
    		this.trainees = trainees;
    		this.phoneemployeeses = phoneemployeeses;
    		this.ruleses = ruleses;
    		this.salaries = salaries;
    		this.cvs = cvs;
    		this.employeeses = employeeses;
    	}
     
    	@Id
    	@GeneratedValue(strategy = IDENTITY)
    	@Column(name = "idemployees", unique = true, nullable = false)
    	public Integer getIdemployees() {
    		return this.idemployees;
    	}
     
    	public void setIdemployees(Integer idemployees) {
    		this.idemployees = idemployees;
    	}
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "manager_id")
    	public Employees getEmployees() {
    		return this.employees;
    	}
     
    	public void setEmployees(Employees employees) {
    		this.employees = employees;
    	}
     
    	@Column(name = "firstame", nullable = false, length = 45)
    	public String getFirstame() {
    		return this.firstame;
    	}
     
    	public void setFirstame(String firstame) {
    		this.firstame = firstame;
    	}
     
    	@Column(name = "lastname", nullable = false, length = 45)
    	public String getLastname() {
    		return this.lastname;
    	}
     
    	public void setLastname(String lastname) {
    		this.lastname = lastname;
    	}
     
    	@Column(name = "mail", nullable = false, length = 45)
    	public String getMail() {
    		return this.mail;
    	}
     
    	public void setMail(String mail) {
    		this.mail = mail;
    	}
     
    	@Column(name = "function", nullable = false, length = 45)
    	public String getFunction() {
    		return this.function;
    	}
     
    	public void setFunction(String function) {
    		this.function = function;
    	}
     
    	@Column(name = "sheet")
    	public String getSheet() {
    		return this.sheet;
    	}
     
    	public void setSheet(String sheet) {
    		this.sheet = sheet;
    	}
     
    	@Column(name = "rib")
    	public Integer getRib() {
    		return this.rib;
    	}
     
    	public void setRib(Integer rib) {
    		this.rib = rib;
    	}
     
    	@Column(name = "MaritalStatus", length = 45)
    	public String getMaritalStatus() {
    		return this.maritalStatus;
    	}
     
    	public void setMaritalStatus(String maritalStatus) {
    		this.maritalStatus = maritalStatus;
    	}
     
    	@Column(name = "number_of_children")
    	public Integer getNumberOfChildren() {
    		return this.numberOfChildren;
    	}
     
    	public void setNumberOfChildren(Integer numberOfChildren) {
    		this.numberOfChildren = numberOfChildren;
    	}
     
    	@Column(name = "password", length =60)
    	public String getPassword() {
    		return this.password;
    	}
     
    	public void setPassword(String password) {
    		this.password = password;
    	}
     
    	@OneToMany(cascade = CascadeType.ALL, mappedBy = "employees")
    	public Set<Cv> getCvs() {
    		return this.cvs;
    	}
     
    	public void setCvs(Set<Cv> cvs) {
    		this.cvs = cvs;
    	}
     
    	@OneToMany(cascade = CascadeType.ALL, mappedBy = "employees")
    	public Set<Trainee> getTrainees() {
    		return this.trainees;
    	}
     
    	public void setTrainees(Set<Trainee> trainees) {
    		this.trainees = trainees;
    	}
     
    	@ManyToMany(cascade = CascadeType.ALL)
    	@JoinTable(name = "employes_rules", catalog = "proxym_data_base", joinColumns = { @JoinColumn(name = "employees_idemployees", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "rules_idrules", nullable = false, updatable = false) })
    	public Set<Rules> getRuleses() {
    		return this.ruleses;
    	}
     
    	public void setRuleses(Set<Rules> ruleses) {
    		this.ruleses = ruleses;
    	}
     
    	@OneToMany(cascade = CascadeType.ALL, mappedBy = "employees")
    	public Set<Employees> getEmployeeses() {
    		return this.employeeses;
    	}
     
    	public void setEmployeeses(Set<Employees> employeeses) {
    		this.employeeses = employeeses;
    	}
     
    	@OneToMany(cascade = CascadeType.ALL, mappedBy = "employees")
    	public Set<Adressemployes> getAdressemployeses() {
    		return this.adressemployeses;
    	}
     
    	public void setAdressemployeses(Set<Adressemployes> adressemployeses) {
    		this.adressemployeses = adressemployeses;
    	}
     
    	@OneToMany(cascade = CascadeType.ALL, mappedBy = "employees")
    	public Set<Salary> getSalaries() {
    		return this.salaries;
    	}
     
    	public void setSalaries(Set<Salary> salaries) {
    		this.salaries = salaries;
    	}
     
    	@OneToMany(cascade = CascadeType.ALL, mappedBy = "employees")
    	public Set<Vacation> getVacations() {
    		return this.vacations;
    	}
     
    	public void setVacations(Set<Vacation> vacations) {
    		this.vacations = vacations;
    	}
     
    	@OneToMany(cascade = CascadeType.ALL, mappedBy = "employees")
    	public Set<Phoneemployees> getPhoneemployeeses() {
    		return this.phoneemployeeses;
    	}
     
    	public void setPhoneemployeeses(Set<Phoneemployees> phoneemployeeses) {
    		this.phoneemployeeses = phoneemployeeses;
    	}
     
    }
    donc si j`utilise le junit il me faut une classe comme :
    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
     
    package com.proxymit.grh.dao.impl;
     
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
     
    import com.proxymit.grh.dao.EmployeesDAO;
    import com.proxymit.grh.domain.Employees;
     
     
     
    import junit.framework.Assert;
    import junit.framework.TestCase;
     
    @ContextConfiguration(locations ={"classpath:com/proxymit/grh/config/dispatcher-servlet.xml"})
    @RunWith(SpringJUnit4ClassRunner.class)
    public class EmployeesDAOImplTest extends TestCase {
     
     
    	@Autowired
        private EmployeesDAO employes;
     
    	@Test
    	public void testAddemployee() throws Exception {
    		Employees empl = new Employees();
    		empl.idemployees =9;
    		empl.firstame="test";
    		empl.lastname="testlastname";
    		empl.mail="mailtest";
    		empl.function="fuctiontest";
    		empl.sheet="testsheet";
    		empl.rib=6543;
    		empl.maritalStatus="sigle";
    		empl.numberOfChildren=0;
    		//employes.createEmploye(empl, true);
    // ici il faut que la methode void a bien fonctionner  avec assert ??
    il faut savoir que la méthode de persistance a bien fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	@Override
    	public void createEmploye(Employees employe, boolean verif) {
    		if (verif = true )
    		{
    			hibernateTemplate.save(employe);
    		}
    		else 
    		{
    			logger.info(" impossible de faire cette action");
    		}
    	}
    mais toujours j`arrive pas a savoir ??

  2. #2
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut
    Bonjour,

    Dans un test on ne se contente pas uniquement de valider le retour de la méthode appelée, on test également l'état global du système.

    Essaye de réfléchir fonctionnellement à ce que tu veux tester plutôt que d'essayer de comprendre techniquement ce que tu dois faire.

    Ici tu cherches à tester la méthode qui t'ajoute un employé en base. La vérification du bon fonctionnement de ta méthode sera de vérifier que ton employé à bien été créé en base. Tu peux soit utiliser des outils comme DBUnit qui vont te permettre de valider l'état de ta base de donnée ou sinon plus simplement appeler la méthode getEmployees(), vérifier que tu n'en ai qu'un seul et que ses attributs sont correctes. Cependant ce test est moins unitaires car tu t'appuie sur une autre méthode potentiellement buggé pour valider.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 47
    Par défaut
    Bon merci pour votre réponse nrichand , mais il faut savoir que les tests unitaires interviennent d`une manière virtuelle , c a d , il ne faut pas accéder a la BD et faire la persistance ensuite vous accéder une autre fois pour récupérer les informations c`est pas le principe de tests unitaires , il faut travailler de telle sorte aucune requête ne s`exécute vers BD . Il faut trouver une solution de telle sorte qu`on construit un Objet et de faire tester toutes les méthodes possible même si vous tester avec des faux paramètres , c`est ca l`objectif

  4. #4
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut
    Au risque de paraitre pédant : tester un dao de manière unitaire sans base ne sert pas à grand chose...

    Par contre tu n'es pas obligé de taper sur ta vrai base de donnée. La solution la plus répandue est de demander à ton test de créer la base de donnée en mémoire (avec H2, HsqlDb, Derby) en se basant sur les annotations hibernate. Ton test t'apportera ainsi une plus value.

    Sinon l'autre solution serait de mocker toute les méthodes persist, save, find, ... Cependant, c'est couteux et encore une fois, à quoi ça sert?

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 47
    Par défaut
    bon merci une autre fois nrichand pour votre reponse , je vais essayer de mocker toute les méthodes ( si vous avez exemple ou un lien qui explique ce principe , prière de me l`envoyé )

  6. #6
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut
    L'outil de mock surement le plus simple à prendre en main est pour moi Mockito. Tu trouve un tutorial ici (cherche sur développez il y en a d'autres).

Discussions similaires

  1. Tester une fonction void
    Par Ale-fonce dans le forum Débuter
    Réponses: 7
    Dernier message: 13/04/2012, 00h28
  2. [vb.net] tester une valeur nulle de maniere elegante
    Par graphicsxp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/08/2005, 15h36
  3. tester une chaine de connection
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/05/2005, 13h32
  4. tester une periode de date
    Par jpg dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 03/12/2004, 15h37
  5. [Débutant] Tester une connection sur bdd
    Par lando dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/09/2003, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo