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

Struts 1 Java Discussion :

Junit et DynaActionForm


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut Junit et DynaActionForm
    Bonjour,

    Je réalise des tests Junit sur des servlet. Mon servlet à besoin d'analyser un formulaire. Mon formulaire est un formulaire dynamique défini dans mon fichier struts-config.

    Dans mon test Junit je dois donc hardcoder une instance de mon formulaire. Le code ressemble à ça:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    FormBeanConfig form = new FormBeanConfig();
    FormPropertyConfig property = new FormPropertyConfig();
    property.setName("submit");
    property.setType("java.lang.String");
    form.addFormPropertyConfig(property);
     
    //FIXME: nullpointer exception
    form.setProperty("submit", null);

    seulement lorsque je veux utiliser la méthode setProperty, un nullpointer exception se déclanche.

    D'ou ma premiére question: comment utiliser les formulaires dynamiques dans un test junit?

    En cherchant sur le web anglophone j'ai lu qu'il fallait appeller deux actions struts dans le test: une pour créer le formulaire et une pour seter ses propriétés.

    Comment peut-on procéder?

  2. #2
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut
    Bon, il semblerait que j'ai réussi à créer mon formulaire. Je posterais le code quand j'aurais pu tester.

    En revanche impossible de l'associer à mon test, pour ça il y a une méthode, setAction form:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    setRequestPathInfo(MODULE,URL);
    setActionForm(form);
    actionPerform();
    verifyForwardPath(FORWARD_PATH);
    verifyNoActionErrors();

    Mais quand je lance mon test j'obtiens cette stacktrace:

    java.lang.NoSuchMethodError: org.apache.struts.util.RequestUtils.selectModule(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/ServletContext; )V
    at servletunit.struts.Common.setActionForm(Common.java:493)
    at servletunit.struts.MockStrutsTestCase.setActionForm(MockStrutsTestCase.java:888)
    at org.dgme.rita.web.action.home.AcceptChartTest.testSuccessfull(AcceptChartTest.java:47

    (j'ai enlevé la fin pour rester compréhensible)

    Est-ce que quelqu'un à déja utilisé les tests Junit, car ça doit tout de même être un problème fréquent...

  3. #3
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    C'est simple tu as un gros probleme.
    JE sais pas comment tu construis ton form mais le probleme vient de la!


    Quand tu auras mis le code qui va plus haut dans ce que tu as mis je saurais peut-etre te dire la solution.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut
    Voici donc la maniére dont je construit mon formulaire.

    Code java : 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
     
    FormBeanConfig form = new FormBeanConfig();
     
    form.setType("org.apache.struts.action.DynaActionForm");
     
    form.setName("BusinessServiceForm");
    FormPropertyConfig property = new FormPropertyConfig();
    property.setName("submit");
    property.setType("java.lang.String");
    form.addFormPropertyConfig(property);
     
    form.setProperty("submit", "delete");
     
    DynaActionFormClass dynaClass = form.getDynaActionFormClass();
     
    try
    {
    DynaActionForm dynaForm = (DynaActionForm)dynaClass.newInstance();
     
    setRequestPathInfo(MODULE, URL);
    setActionForm(actionForm);
    actionPerform();
    }
    catch (InstantiationException e)
    {
    LOG.fatal("InstanciationException: " + e.toString()); 
    }
    catch (IllegalAccessException e)
    {
    LOG.fatal("IllegalAccessException: " + e.toString()); 
    }

  5. #5
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Et ton formulaire il est lié a une action? OU tu as seuleument un formulaire?
    Car si tu as une action il ne sert a rien de mettre le formulaire en parametre mais plutot et surtout le path de l'action (comme dans un navigateur quoi)

  6. #6
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut
    Oui, mon action est dans le try:

    setRequestPathInfo(MODULE, URL);
    actionPerform();

    MODULE et URL sont des variables statiques qui représente mon module struts et le nom de mon action.

  7. #7
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut
    ah oui, il y a une erreur dans ce que j'ai écris, c'est setActionForm(dynaForm); et non pas setActionForm(actionForm);

    Mais toujours la même exception...

  8. #8
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut
    Bon finalement j'ai trouvé une feinte, mais le mystére reste entier...

    Je ne créé aucun formulaire, voici mon test:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    addRequestParameter("submit","delete");
    setRequestPathInfo(MODULE, URL);
    actionPerform();

    Je fais juste un addRequestParameter et là miracle, dans mon servlet...
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DynaActionForm orgaForm = (DynaActionForm) form;
    String button = (String) orgaForm.get("submit");
     
    if (LOGGER.isDebugEnabled())
    {
    	if (button != null)
    		LOGGER.debug("button=" + button);
    }

    logger me renvoie bien delete!

    Par contre la technique marche uniquement pour des DynaActionForm qui ont que des champs String, car addRequestParameter ne prend que des String.


    J'ai lu sur le web anglophone que certains haissaient les DynaActionForm , je commence à comprendre pourquoi...

  9. #9
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Citation Envoyé par maxf1
    Et ton formulaire il est lié a une action? OU tu as seuleument un formulaire?
    Car si tu as une action il ne sert a rien de mettre le formulaire en parametre mais plutot et surtout le path de l'action (comme dans un navigateur quoi)

    Voila ce que je t'avais dit si tu lisais jusqu'au bout tu aurais peut-etre trouvé tout de suite.


    Sinon je vois pas le probleme pour les addRequestParameter c'est des parametres qu'on envoie, non? Le formulaire est envoyé automatiquement donc je ne comprend pas...

  10. #10
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut
    Euh moi non plus je comprends pas...

    Tu me dis que je n'ai pas besoin de passer le formulaire (je sais pas si c'est en paramétre ou ailleurs) mais pourtant ma servlet a un comportement anormal si je n'ai pas de résultat passé dans un formulaire.

    C'est une servlet qui doit mettre à jour ou supprimmer un objet selon ce qui est indiqué dans un formulaire. Donc si tout est nul je ne peux rien tester.

    Pour les addRequestParametrer: si dans mon formulaire j'ai trop champs de type String, je fais un addRequestParamter pour chaque champ.

    Et mon formulaire se trouve instancié coté servlet. Mais ça ne fonctionne que pour des champs de type String.

  11. #11
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Sous struts, ton formulaire est initialisé dans la servlet ou c'est l'utilisateur qui le rempli dans la jsp?

  12. #12
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 32
    Par défaut
    L'utilisateur le remplit dans la jsp.

    Mais pour faire un test, je dois forcément faire un mock

  13. #13
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Ce que tu devrais faire est d'initialiser ton formulaire avec l'action, récuperer ton formulaire, le remplir.

    Le remettre dans ton action et executer ton action.

Discussions similaires

  1. [Struts][DynaActionForm et persistance des objets]
    Par jcos dans le forum Struts 1
    Réponses: 4
    Dernier message: 22/12/2004, 09h15
  2. Equivalent à JML / JUnit pour le C++
    Par meuns dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 09/12/2004, 15h16
  3. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 13h11
  4. [JUnit] NoClassDefFoundError:junit/framework/TestCase
    Par Adjanakis dans le forum Tests et Performance
    Réponses: 4
    Dernier message: 14/04/2004, 13h23
  5. Réponses: 3
    Dernier message: 09/04/2004, 23h35

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