Java GUI Testing - JFCUnit Introduce

Background:

JFCUnit is an extension to the popular testing framework JUnit. This document assumes you are familiar with the usage of JUnit. If not, visit the main JUnit website where there are a number of links to some excellent resources on the subject.

 

 

*         Environment setup & JFCUnit installing…

Download below jars:  JUnit.jar 3.7 or greater, JFCUnit.jar, jakarta-regexp-1.5.jar 

Install JRE1.4 or greater & Eclipse IDE

 

*         A Sample Java GUI & JFCUnit Test

1.         Deploy downloaded jars into your project class path, see following image

 

 

2.         create java GUI sample codes

package com.fish.ui;

import java.awt.BorderLayout;

import java.awt.FlowLayout;

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

 

public class NewTestViewImpl extends JDialog implements TestView {

 

    /**

     *

     */

    private static final long serialVersionUID = 1L;

 

    private JTextField nameField;

    private JButton submitButton;

    private JButton cancelButton;

    private JLabel nameLabel;

    private boolean proceed = false;

 

    public NewTestViewImpl(Object object) {

       // super(object);

       initComponents();

       layoutComponent();

    }

 

    private void initComponents() {

       this.nameField = new JTextField(15);

       this.submitButton = new JButton("OK");

       this.cancelButton = new JButton("Cancel");

       this.nameLabel = new JLabel("Test Name:");

    }

 

    private void layoutComponent() {

       JPanel topPane = new JPanel();

       topPane.add(nameLabel);

       topPane.add(nameField);

       JPanel buttonPane = new JPanel();

       buttonPane.setLayout(new FlowLayout());

       buttonPane.add(submitButton);

       buttonPane.add(cancelButton);

       getContentPane().add(topPane, BorderLayout.NORTH);

       getContentPane().add(buttonPane, BorderLayout.LINE_END);

       pack();

    }

   

 

    public String getTestName() {

       return nameField.getText();

    }

   

    public void setTestName(String testName) {

       this.nameField.setText(testName);

    }

 

    public void display() {

       this.setVisible(true);

    }

 

    public boolean proceed() {

       return proceed;

    }

 

    public boolean cancelled() {

       return !proceed;

    }

 

    public static void main(String[] args) {

       new NewTestViewImpl(null).setVisible(true);

    }

 

    public void setupJFCNames() {

       nameField.setName("testNameField");

       submitButton.setName("SubmitButton");

       cancelButton.setName("CancelButton");    

    }

 

    public void addListener(Listener listener) {

       submitButton.addActionListener(listener);

       cancelButton.addActionListener(listener);

    }

 

 

    public void closeView() {

   

    }

 

 

    public void openView() {

 

    }

}

 

3.         JFCUnit test codes

package com.fish.ui.test;

 

import javax.swing.JButton;

import javax.swing.JComponent;

import javax.swing.JTextField;

 

import com.fish.ui.NewTestViewImpl;

 

import junit.extensions.jfcunit.JFCTestCase;

import junit.extensions.jfcunit.JFCTestHelper;

import junit.extensions.jfcunit.TestHelper;

import junit.extensions.jfcunit.finder.NamedComponentFinder;

import junit.framework.Test;

import junit.framework.TestSuite;

 

public class NewTestViewImplTest extends JFCTestCase {

    private NewTestViewImpl newTestViewImpl = null;

    private TestHelper helper = null;

 

    public NewTestViewImplTest(String name) {

        super(name);

    }

 

    protected void setUp() throws Exception {

       super.setUp();

       helper = new JFCTestHelper();

       newTestViewImpl = new NewTestViewImpl(null);

       newTestViewImpl.setupJFCNames();

       newTestViewImpl.setVisible(true);

       System.out.println("setup test case");

    }

 

    protected void tearDown() throws Exception {

       newTestViewImpl = null;

       TestHelper.cleanUp(this);

       super.tearDown();

       System.out.println("setup test case");

 

    }

    public void testUI() {

       System.out.println("start testing ok button......");

       NamedComponentFinder finder = new NamedComponentFinder(

              JComponent.class, "SubmitButton");

       JButton submitButton = (JButton) finder.find(newTemplateViewImpl, 0);

       assertNotNull("Could not find the submit button", submitButton);

 

       finder = new NamedComponentFinder(

              JComponent.class, "CancelButton");

       JButton CancelButton = (JButton) finder.find(newTemplateViewImpl, 0);

       assertNotNull("Could not find the cancel button", CancelButton);

      

       finder = new NamedComponentFinder(

              JComponent.class, "testNameField");

       JTextField testNameField = (JTextField) finder.find(newTestViewImpl, 0);

       assertNotNull("Could not find the cancel button", templateNameField);

      

       newTestViewImpl.setTestName("mTestName");

       assertEquals(testNameField.getText(), "mTestName");

//     System.out.println(text);

       testNameField.setText("");

       assertEquals("Test field is not null","",newTestViewImpl.getTestName());   

      

    }

    public static Test suite() {

       return new TestSuite(NewTestViewImplTest.class);

    }

 

    public static void main(String args[]) {

       junit.textui.TestRunner.run(suite());

    }

 

}

4.         Run JFCUnit test case using eclipse plug-in Junit Runner to load testcase and run.

More Information:

http://jfcunit.sourceforge.net/