Pruebas Unitarias en componentes Swing en Java

Creo que realizar pruebas es una buena práctica en cualquier desarrollo de Software. Comunmente, todo desarrollador realiza sus pruebas de manera aislada y siguiendo su propia metedología (por lo menos la mayoría que conozco).

Soy nuevo en este terreno de las pruebas, pero visualizo indispensable realizar una bateria de Pruebas Unitarias conforme se vayan desarrollando los diversos módulos del proyecto. Para esto, y en caso especifico de Java con componentes Swing, recomiendo utilizar la siguiente librería:

assertj-swing-junit

La última versión de la librería (a la fecha de publicación de este artículo) es la 3.2.0, la cual funciona con la JVM 8. Pero si quieren trabajar con la versión 7, pueden descargar la versión 2.2.0

Un ejemplo básico sería:

public class SimpleFrame extends JFrame{
    public SimpleFrame(){
        final JLabel label = new JLabel("Test v1");
        label.setName("Label1");
        this.getContentPane().add(label, BorderLayout.NORTH);
 
        final JTextField text = new JTextField("");
        text.setName("Text1");
        this.getContentPane().add(text, BorderLayout.CENTER);
 
        JButton button = new JButton("Ok");
        button.setName("ButtonOk");
        button.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                label.setText(text.getText());
            }
 
            @Override
            public void mousePressed(MouseEvent e) {
 
            }
 
            @Override
            public void mouseReleased(MouseEvent e) {
 
            }
 
            @Override
            public void mouseEntered(MouseEvent e) {
 
            }
 
            @Override
            public void mouseExited(MouseEvent e) {
 
            }
        });
 
        this.getContentPane().add(button, BorderLayout.SOUTH);
 
        //this.pack();
        //this.setSize(800, 600);
        //this.setVisible(true);
    }
 
    public static void main(String[] args){
        new SimpleFrame();
    }
}

La prueba quedaría así:

public class SimpleFrameTest {
    private FrameFixture window;
 
    @BeforeClass
    public static void setUpOnce() {
        FailOnThreadViolationRepaintManager.install();
    }
 
    @Before
    public void setUp() {
        SimpleFrame frame = GuiActionRunner.execute(new GuiQuery<SimpleFrame>() {
            @Override
            protected SimpleFrame executeInEDT() throws Throwable {
                return new SimpleFrame();
            }
        });
        window = new FrameFixture(frame);
        window.show(); // shows the frame to test
    }
 
    @Test
    public void shouldCopyTextInLabelWhenClickingButton() {
        window.textBox("Text1").enterText("Some random text");
        window.button("ButtonOk").click();
        window.label("Label1").requireText("Some random text");
    }
 
    @After
    public void tearDown() {
        window.cleanUp();
    }
}

Referencias:
http://joel-costigliola.github.io/assertj/assertj-swing-quick-start.html
http://mvnrepository.com/artifact/org.assertj/assertj-swing-junit

Analista/Desarrollador y cofundador de QBit Mexhico. Tecnologías utilizadas Android, Java (EJB, Servlets, Faces, Groovy & Grails, Maven, Swing), .Net (C#, VB, ASP, MVC), Delphi, Spring, Hibernate, DTSx, Oracle, T-SQL, Firebird, MySQL, MongoDB, NodeJs, ReactJs (Flux). Sistemas Operativos Mac, Ubuntu y Windows.

Twitter LinkedIn 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *