Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2011
    Messages : 73
    Points : 18
    Points
    18

    Par défaut Fest Swing NullPointer sur mes éléments

    Bonjour à tous,

    je me lance dans le test d'interface grapique avec la librairie Fest-Swing.

    Pour débuter, j'ai voulu réaliser un petit test tout simple : une fenêtre contenant un bouton. Quand l'utilisateur clique sur le bouton, un label affiche "Click".

    Voici le code de ma fenêtre :

    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
     
    public class Fenetre extends JFrame 
    {	
    	private JButton btn;
    	private Container panel_haut;
    	private JLabel result1;
    	private JPanel panel_bas;
     
    	public Fenetre()
    	{
    		this.setSize(new Dimension(600,200));
    		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
                     ...
     
    		result1 = new JLabel();
    		result1.setName("result1");
    		result1.setHorizontalAlignment(SwingConstants.CENTER);
    		result1.setBounds(0, 0, 300, 30);
    		panel_bas.add(result1);
     
     
    		btn = new JButton("Click me!");
    		btn.setName("clickButton");
    		btn.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) 
    			{
    				result1.setText("Click");
    			}
    		});
    		btn.setBounds(259, 79, 112, 53);
    		panel_haut.add(btn);
    	}
    }

    Ensuite, j'ai écrit le test suivant (en me basant sur http://www.javaworld.com/javaworld/j...st.html?page=2) :

    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
     
    import org.fest.swing.fixture.FrameFixture;
    import org.junit.Test;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.BeforeMethod;
     
    public class FenetreTest 
    {
     
    	private FrameFixture frame;
     
    	@BeforeMethod
    	public void setUp() 
    	{
    		frame = new FrameFixture(new Fenetre());
    		frame.show();
    	}
     
    	@Test 
    	public void shouldShowClickIfUserClickButton() 
    	{
    		frame.button("clickButton").click();
    		frame.label("result1").requireText("Click");
    	}
     
    	@AfterMethod
    	public void tearDown() 
    	{
    		frame.cleanUp();
    	}
    }
    Le problème est que lorsque j'exécute mon test, il me lance un java.lang.NullPointerException sur la ligne frame.button("clickButton").click();

    Je supose donc qu'il ne trouve pas mon bouton. Pourtant j'ai fait correspondre le nom avec celui que l'on trouve dans Fenetre.

    Quelqu'un aurait-il une idée?

    Merci beaucoup

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2011
    Messages : 73
    Points : 18
    Points
    18

    Par défaut

    Je viens de trouver la raison...

    Mon test ne passait pas dans la méthode setUp().
    L'annotation @BeforeMethod ne fonctionne pas apparament alors.

    En la remplacant par @Before, mon test ne me donne plus d'erreur.

    Cependant, il echoue en me disant que result1 est vide.

  3. #3
    Modérateur

    Homme Profil pro Mathieu
    Ingénieur développement logiciels
    Inscrit en
    avril 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathieu
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : avril 2004
    Messages : 1 181
    Points : 1 675
    Points
    1 675

    Par défaut

    Tu utilisais des annotations TestNG dans un test JUnit.
    C'est pour ça que les annotations ne fonctionnent pas.


    As-tu vérifié (Debugger ou affichage) que tu passes bien dans le actionPerformed ?
    Tes panels haut et bas sont ils bien ajoutés à la fenêtre ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    décembre 2011
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2011
    Messages : 73
    Points : 18
    Points
    18

    Par défaut

    Merci pour l'explication.

    Je viens de vérifier et mon test ne passe effectivement pas par le actionPerformed. Je ne comprends pas car la simulation du click devrait l'y faire passer non?

    Mes panels sont bien affichés (j'ai rajouté un label pour le voir) mais je ne vois pas mon bouton lors de l'exécution du test...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •