WELCOME ABOARD.

[转]使用FEST-Swing测试GUI

上一篇 / 下一篇  2010-04-21 20:58:54 / 个人分类:java

    在Java中最常用的单元测试工具要算JUnit了。FEST-Swing是一个能够与JUnit集成的GUI测试框架。使用FEST-Swing可以更方便的对Swing进行一系列的测试。下面就说一下如何使用FEST-Swing进行测试。
    首先到[url]http://code.google.com/p/fest/downloads/list[/url]上面下载最新的FEST-Swing文件,一般文件名应该是fest-swing-x.x.zip。下载完成之后解压,其目录结构如附图所示
    注意,需要将fest-swing-1.0.jar以及lib下面的所有文件都添加到工程路径下,同时需要添加JUnit支持。这里我们使用JUnit4,添加完成之后即可使用FEST-Swing了。
 
下面新建一个被测试文件,代码如下:
importjava.awt.BorderLayout;
importjava.awt.Container;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;

importjavax.swing.Box;
importjavax.swing.BoxLayout;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JTextField;

publicclassMyFrame.extendsJFrame. {
  publicMyFrame() {
    setTitle("My Frame");
    setSize(200, 100);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    Container content = getContentPane();
    Box vbox =newBox(BoxLayout.Y_AXIS);
    content.add(vbox, BorderLayout.CENTER);
    
    finalJLabel showTextLabel =newJLabel(" ");
    showTextLabel.setName("show");
    vbox.add(showTextLabel);
    finalJTextField input =newJTextField();
    input.setName("input");
    vbox.add(input);
    JButton button =newJButton("copy");
    button.setName("copy"); 
    button.addActionListener(newActionListener() {

      @Override
      publicvoidactionPerformed(ActionEvent e) {
        showTextLabel.setText(input.getText());
      }
        
    });
    vbox.add(button);
  }
}
    这里我们就不详细说明代码含义了,大体的功能是点击按钮,可以将JTextField输入的文字显示在JLabel上面。需要注意的是,FEST-Swing是使用组件的name值来获取组件的,因此这个setName方法的调用是必不可少的。
 
    下面新建一个JUnit4 Test Case。首先需要有一个FrameFixture对象的属性。这里可以把FrameFixture理解成被测试的对象,因为我们想测试一个JFrame,所以使用FrameFixture。在FEST-Swing中,这些类与Swing的组件名字大体是一致的,只是后面多了一个Fixture。比如,JButton对应的类就是JButtonFixture。然后在@Before方法中对其进行实例化:
privateFrameFixture frame;
    
  @Before
  publicvoidsetUp() {
    frame. =newFrameFixture(newMyFrame());
    frame.show();// 将frame显示出来
  }
 
    在@After方法中对其进行清理:
@After
  publicvoidtearDown() {
    frame.cleanUp();
  }
 
    然后编写@Test方法:
@Test
  publicvoidtestCopyTextToLabel() {
    frame.textBox("input").enterText("Hello World!");
    frame.button("copy").click();
    frame.label("show").requireText("Hello World!");
  }
    尽管没有注释,我想这个代码已经很清楚了:首先获得frame上面的input,在其中输入Hello World!,然后点击copy按钮,这时show的文字要求是Hello World!这就是一段自说明的代码,很明白。这里就是像前面所说的,使用组件设定的name值来获取组件。
 
    这样就编写完成一个测试用例了,整个的代码如下:
importorg.fest.swing.fixture.FrameFixture;
importorg.junit.After;
importorg.junit.Before;
importorg.junit.Test;

publicclassMyFrameTest {

  privateFrameFixture frame;
    
  @Before
  publicvoidsetUp() {
    frame. =newFrameFixture(newMyFrame());
    frame.show();
  }

  @After
  publicvoidtearDown() {
    frame.cleanUp();
  }

  @Test
  publicvoidtestCopyTextToLabel() {
    frame.textBox("input").enterText("Hello World!");
    frame.button("copy").click();
    frame.label("show").requireText("Hello World!");
  }
}
    下面运行这个测试用例,就可以看到执行情况……貌似还有动画效果,很漂亮。呵呵~~

TAG: fest fest-swing java Java swing test

 

评分:0

我来说两句

Open Toolbar