erreur dans mon programme de test

Modérateurs : graffion, jmdouin, agoncal, mlebihan

xavier
Messages : 148
Inscription : 13 oct. 2007 16:28
Localisation : valenciennes

erreur dans mon programme de test

Message par xavier » 14 oct. 2007 14:14

Bonjour,
j'ai 2 erreurs dans mon programme de test dans les méthodes "checkData()" et "getCheckDataError()" et je ne les trouve pas
Voici mon code :

Code : Tout sélectionner

	public boolean checkData()
	{
		boolean retour = true ;
		if ((id.equals("")) || (id == null))
			retour = false ;
		if ((firstname.equals("")) || (firstname == null))
			retour = false ;
		if ((lastname.equals("")) || (lastname == null))
			retour = false ;
		return retour ;
	}

	public String getCheckDataError()
	{
		if ((id.equals("")) || (id == null))
			return "Invalid id" ;
		if ((firstname.equals("")) || (firstname == null))
			return "Invalid first name" ;
		if ((lastname.equals("")) || (lastname == null))
			return "Invalid last name" ;
		return "OK" ;
	}
Et voici mon message d'erreur :

Code : Tout sélectionner

[junit] Testcase: testCreateInvalidCustomer took 0 sec
[junit]       Caused an ERROR
[junit] null
[junit] java.lang.NullPointerException
[junit]       at src.java.Customer.checkData(Unknown Source)
[junit] .......................
[junit] Testcase: testCreateInvalidCustomerErrorMessages took 0 sec
[junit]       Caused an ERROR
[junit] null
[junit] java.lang.NullPointerException
[junit]       at src.java.Customer.getCheckDataError(Unknown Source)
Est-ce que quelqu'un pourrait me venir en aide ?
Merci à l'avance.
Xavier

juliend
Messages : 7
Inscription : 14 oct. 2007 14:13

Message par juliend » 14 oct. 2007 14:51

en fait, le compileur regarde que l'id est egal à "" avant de vérifier que l'id est null. Comme l'id est null , il renvoie l exception quand il execute id.equals("").

Inverse les conditions, ça devrait marcher.

Code : Tout sélectionner

if ((id == null) || (id.equals("")))
         retour = false ;

xavier
Messages : 148
Inscription : 13 oct. 2007 16:28
Localisation : valenciennes

réponse au message de Juliend

Message par xavier » 14 oct. 2007 15:32

Rebonjour,
merci Juliend, ca marche.
Xavier

Komla
Messages : 32
Inscription : 15 oct. 2007 4:29

Message par Komla » 15 oct. 2007 4:40

Une variable qui contient la valeur null (aucune valeur) est une référence qui ne pointe sur rien. Si vous essayez d’utiliser une telle variable, une erreur d’exécution se produit : NullPointerException.

Ainsi donc le code :
if ((id.equals("")) || (id == null))
provoque NullPointerException quand id==null.

Cependant inverser ou commuter les opérandes de l’opérateur OU ne fait que cacher le problème.

Il faut écrire "".equals(id) au lieu de id.equals("").

Komla !

juliend
Messages : 7
Inscription : 14 oct. 2007 14:13

Message par juliend » 15 oct. 2007 11:55

merci de la précision et de l'explication :)

Julien.

Alain Canu
Messages : 1
Inscription : 15 oct. 2007 22:52

Message par Alain Canu » 16 oct. 2007 22:11

A mon avis, une technique plus générique est de ne pas développer en fonction du compilateur (qui a toute légimité pour inverser l'ordre des tests).

remplacer
if ((id == null) || (id.equals(""))) retour = false ;
par
if (id == null) {
retour = false ;
}
else if (id.equals("")) {
retour = false ;
}
Les couples { } permettent d'ajouter des points d'arrêt et rendent le programme plus maintenable.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Bing [Bot] et 1 invité