tp_rules question 2 java.lang.NullPointerException sans échec
Modérateur : douinj
tp_rules question 2 java.lang.NullPointerException sans échec
Re-bonjour,
Le test JNEWS de mon code pour la question 2 du tp "rules" passe sans échec mais indique qu'une erreur (exception pour junit) a été rencontrée sur le test 'testAvecIntrospection' (java.lang.NullPointerException), et que je dois envoyer le source incriminé.
Comment dois-je procéder pour envoyer le code ?
Avec mes remerciements
Le test JNEWS de mon code pour la question 2 du tp "rules" passe sans échec mais indique qu'une erreur (exception pour junit) a été rencontrée sur le test 'testAvecIntrospection' (java.lang.NullPointerException), et que je dois envoyer le source incriminé.
Comment dois-je procéder pour envoyer le code ?
Avec mes remerciements
Re: tp_rules question 2 java.lang.NullPointerException sans échec
bonjour, via wetransfer à mon adresse mail
vérifiez à nouveau votre utilisation de l'introspection, notamment le type constaté ...
bonne fin de tp
vérifiez à nouveau votre utilisation de l'introspection, notamment le type constaté ...
bonne fin de tp
Re: tp_rules question 2 java.lang.NullPointerException sans échec
Même erreur de mon coté, après quelques 'tentatives' pour éliminer la remarque je n'ai pas pu trouver ce qui causait cela.
Re: tp_rules question 2 java.lang.NullPointerException sans échec
Bonjour, je viens d'essayer avec la solution dite référente, ces quelques lignes peuvent peut-être vous aider
La recherche :
....
Class<?> classCommand = Class.forName(command);
//Class<?> classCommand = Class.forName(command, true, Thread.currentThread().getContextClassLoader());
instanceCommand = (CommandI<E,R>) classCommand.newInstance();
....
L'exécution,
....
instanceCommand.getClass().getDeclaredMethod("execute", entity.getClass(), result.getClass());
....
Bonne fin de tp
La recherche :
....
Class<?> classCommand = Class.forName(command);
//Class<?> classCommand = Class.forName(command, true, Thread.currentThread().getContextClassLoader());
instanceCommand = (CommandI<E,R>) classCommand.newInstance();
....
L'exécution,
....
instanceCommand.getClass().getDeclaredMethod("execute", entity.getClass(), result.getClass());
....
Bonne fin de tp
Re: tp_rules question 2 java.lang.NullPointerException sans échec
Bonjour M Douin
J'ai relancé un test sur cette question par curiosité et je tombe désormais sur une erreur.
j'ai eu la chance de pouvoir accéder à la source du test et je ne comprend pas comment le test peut réussir
En effet, le test va chercher une classe Z_TestsCommands qui n'existe pas, (logiquement une ClassNotFoundException est donc levée)
mais malgré tout demande une assertion avec un bon résultat
à moins que quelque chose m'échappe.
Merci d'avance,
Bonne journée
J'ai relancé un test sur cette question par curiosité et je tombe désormais sur une erreur.
j'ai eu la chance de pouvoir accéder à la source du test et je ne comprend pas comment le test peut réussir
En effet, le test va chercher une classe Z_TestsCommands qui n'existe pas, (logiquement une ClassNotFoundException est donc levée)
Code : Tout sélectionner
dec.setCommand("question2.Z_TestsCommands$Dec");
Code : Tout sélectionner
moins4.add(dec).add(dec).add(dec).add(dec).add(print.getCommand());
int res = moins4.execute("",10);
assertEquals(6, res);
Merci d'avance,
Bonne journée
Re: tp_rules question 2 java.lang.NullPointerException sans échec
re
Bonne fin de tp
Cette classe est locale à la classe de tests côté JNEWS, tout va bien de ce côté, vérifiez plutôt du côté NullPointerExceptionet je ne comprend pas comment le test peut réussir
En effet, le test va chercher une classe Z_TestsCommands qui n'existe pas, (logiquement une ClassNotFoundException est donc levée)
Bonne fin de tp
Re: tp_rules question 2 java.lang.NullPointerException sans échec
Bonjour M Douin,
Rencontrant cette même erreur je m'interroge également.
L' "Exception inattendue ??? null" ne peut provenir que du test tel que le source le précise : "fail("Exception inattendue ??? " + e.getMessage());"
Pour avoir un null, on imagine très bien que "question2.Z_TestsCommands$Dec" n'existe pas.
Sur ce test, le assertEquals sera donc toujours en échec..
N'y a t-il pas un bout de code que nous ne voyons pas sur cet extrait avec un assert dans le catch sur le type d'erreur par ex ?
Sinon, je ne vois pas comment ce test peut passer, aussi pourriez-vous nous orienter encore une fois ? :-)
Merci pour votre aide,
Bonne journée
Pierre
public void testAvecIntrospection() throws Exception{
try{
ReflectCommand dec = new ReflectCommand();
dec.setCommand("question2.Z_TestsCommands$Dec");
ReflectCommand print = new ReflectCommand();
print.setCommand("question2.Z_TestsCommands$Print");
//print.execute("",10);
MacroCommand<String,Integer> moins4 = new MacroCommand<>();
moins4.add(dec).add(dec).add(dec).add(dec).add(print.getCommand());
int res = moins4.execute("",10);
assertEquals(6, res);
}catch(Exception e){
fail("Exception inattendue ??? " + e.getMessage());
ASSERT ??
Rencontrant cette même erreur je m'interroge également.
L' "Exception inattendue ??? null" ne peut provenir que du test tel que le source le précise : "fail("Exception inattendue ??? " + e.getMessage());"
Pour avoir un null, on imagine très bien que "question2.Z_TestsCommands$Dec" n'existe pas.
Sur ce test, le assertEquals sera donc toujours en échec..
N'y a t-il pas un bout de code que nous ne voyons pas sur cet extrait avec un assert dans le catch sur le type d'erreur par ex ?
Sinon, je ne vois pas comment ce test peut passer, aussi pourriez-vous nous orienter encore une fois ? :-)
Merci pour votre aide,
Bonne journée
Pierre
public void testAvecIntrospection() throws Exception{
try{
ReflectCommand dec = new ReflectCommand();
dec.setCommand("question2.Z_TestsCommands$Dec");
ReflectCommand print = new ReflectCommand();
print.setCommand("question2.Z_TestsCommands$Print");
//print.execute("",10);
MacroCommand<String,Integer> moins4 = new MacroCommand<>();
moins4.add(dec).add(dec).add(dec).add(dec).add(print.getCommand());
int res = moins4.execute("",10);
assertEquals(6, res);
}catch(Exception e){
fail("Exception inattendue ??? " + e.getMessage());
ASSERT ??
Re: tp_rules question 2 java.lang.NullPointerException sans échec
re,
Pour avoir une sortie plus explicite j'ai ajouté la capture de l'exception
public void setCommand(String command)
{
try
{
instanceCommand = (CommandI<E,R>) Class.forName(command).newInstance();
// peut être cet appel manque...
super.setCommand(instanceCommand );
}
catch(Exception e)
{
e.printStackTrace();
}
}
Pour avoir une sortie plus explicite j'ai ajouté la capture de l'exception
public void setCommand(String command)
{
try
{
instanceCommand = (CommandI<E,R>) Class.forName(command).newInstance();
// peut être cet appel manque...
super.setCommand(instanceCommand );
}
catch(Exception e)
{
e.printStackTrace();
}
}
Re: tp_rules question 2 java.lang.NullPointerException sans échec
De nouveaux tests qui pourraient vous aider, je les intègre à la nouvelle version sur JNEWS
Code : Tout sélectionner
public void testAvecIntrospectionDeSkip() throws Exception{
try{
ReflectCommand<Object,Object> skip = new ReflectCommand();
skip.setCommand("question2.SkipCommand");
skip.execute(new Object(), new Object());
}catch(Exception e){
fail("Exception inattendue ??? " + e.getMessage());
}
}
public static class SkipBis extends SkipCommand<String,Integer>{
@Override
public Integer execute(String s, Integer i) throws Exception{
return super.execute(s,i);
}
}
public void testAvecIntrospectionDeSkipBis() throws Exception{
try{
ReflectCommand<String,Integer> skip = new ReflectCommand();
skip.setCommand("question2.TestsCommands$SkipBis");
int res = skip.execute("", 10);
assertEquals(10, res);
}catch(Exception e){
fail("Exception inattendue ??? " + e.getMessage());
}
}
public void testAvecIntrospection() throws Exception{
try{
ReflectCommand dec = new ReflectCommand();
dec.setCommand("question2.TestsCommands$Dec");
ReflectCommand print = new ReflectCommand();
print.setCommand("question2.TestsCommands$Print");
//print.execute("",10);
MacroCommand<String,Integer> moins4 = new MacroCommand<>();
moins4.add(dec).add(dec).add(dec).add(dec).add(print);
int res = moins4.execute("",10);
assertEquals(6, res);
}catch(Exception e){
fail("Exception inattendue ??? " + e.getMessage());
}
}
Re: tp_rules question 2 java.lang.NullPointerException sans échec
Bonsoir,
Effectivement, en ajoutant la lignel'erreur n'existe plus.
J'ai deux interrogations complémentaires :
1/ Pourquoi avoir ajouté un attribut 'instanceCommand' et ne pas avoir utilisé l'attribut 'command' présent par héritage de la classe 'Command' et ne pas avoir directement écrit
?
2/ La classe privée 'SkipBis' que vous donnez dans votre message ne se compile pas, notamment car elle ne redéfinit pas la méthode 'execute' de la super-classe, probablement en raison du type des arguments.
Cette version se compile et permet de dérouler les tests sans erreur :
Mais je ne suis pas sûr qu'elle ait du sens, parce que la méthode 'execute' n'est troujours pas redéfinie...
Effectivement, en ajoutant la ligne
Code : Tout sélectionner
super.setCommand(instanceCommand);
J'ai deux interrogations complémentaires :
1/ Pourquoi avoir ajouté un attribut 'instanceCommand' et ne pas avoir utilisé l'attribut 'command' présent par héritage de la classe 'Command' et ne pas avoir directement écrit
Code : Tout sélectionner
try
{
this.command = (CommandI<E,R>) Class.forName(command).newInstance();
}
catch(Exception e)
{
e.printStackTrace();
}
2/ La classe privée 'SkipBis' que vous donnez dans votre message ne se compile pas, notamment car elle ne redéfinit pas la méthode 'execute' de la super-classe, probablement en raison du type des arguments.
Cette version se compile et permet de dérouler les tests sans erreur :
Code : Tout sélectionner
public static class SkipBis extends SkipCommand
{
public Integer execute(String s, Integer i) throws Exception{
return (Integer) super.execute((Object) s, (Object) i);
}
}