使用FEST-Swing测试GUI

      在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了。
 
下面新建一个被测试文件,代码如下:
 1 import java.awt.BorderLayout; 
 2 import java.awt.Container; 
 3 import java.awt.event.ActionEvent; 
 4 import java.awt.event.ActionListener; 
 5 
 6 import javax.swing.Box; 
 7 import javax.swing.BoxLayout; 
 8 import javax.swing.JButton; 
 9 import javax.swing.JFrame; 
10 import javax.swing.JLabel; 
11 import javax.swing.JTextField; 
12 
13 public class MyFrame extends JFrame { 
14   public MyFrame() { 
15     setTitle("My Frame"); 
16     setSize(200, 100); 
17     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
18      
19     Container content = getContentPane(); 
20     Box vbox = new Box(BoxLayout.Y_AXIS); 
21     content.add(vbox, BorderLayout.CENTER); 
22      
23     final JLabel showTextLabel = new JLabel(" "); 
24     showTextLabel.setName("show"); 
25     vbox.add(showTextLabel); 
26     final JTextField input = new JTextField(); 
27     input.setName("input"); 
28     vbox.add(input); 
29     JButton button = new JButton("copy");
30     button.setName("copy"); 
31     button.addActionListener(new ActionListener() { 
32 
33       @Override 
34       public void actionPerformed(ActionEvent e) { 
35         showTextLabel.setText(input.getText()); 
36       } 
37         
38     }); 
39     vbox.add(button); 
40   } 
41 }
      这里我们就不详细说明代码含义了,大体的功能是点击按钮,可以将JTextField输入的文字显示在JLabel上面。需要注意的是,FEST-Swing是使用组件的name值来获取组件的,因此这个setName方法的调用是必不可少的。
 
     下面新建一个JUnit4 Test Case。首先需要有一个FrameFixture对象的属性。这里可以把FrameFixture理解成被测试的对象,因为我们想测试一个JFrame,所以使用FrameFixture。在FEST-Swing中,这些类与Swing的组件名字大体是一致的,只是后面多了一个Fixture。比如,JButton对应的类就是JButtonFixture。然后在@Before方法中对其进行实例化:
 1 private FrameFixture frame; 
 2     
 3   @Before 
 4   public void setUp() { 
 5     frame = new FrameFixture(new MyFrame()); 
 6     frame.show(); // 将frame显示出来 
 7   }
 8  
 9 //在@After方法中对其进行清理:
10 @After 
11   public void tearDown() { 
12     frame.cleanUp(); 
13   }
14  
15 //然后编写@Test方法:
16 @Test 
17   public void testCopyTextToLabel() { 
18     frame.textBox("input").enterText("Hello World!"); 
19     frame.button("copy").click(); 
20     frame.label("show").requireText("Hello World!"); 
21   }
     尽管没有注释,我想这个代码已经很清楚了:首先获得frame上面的input,在其中输入Hello World!,然后点击copy按钮,这时show的文字要求是Hello World!这就是一段自说明的代码,很明白。这里就是像前面所说的,使用组件设定的name值来获取组件。
 
这样就编写完成一个测试用例了,整个的代码如下:
 1 import org.fest.swing.fixture.FrameFixture; 
 2 import org.junit.After; 
 3 import org.junit.Before; 
 4 import org.junit.Test; 
 5 
 6 public class MyFrameTest { 
 7 
 8   private FrameFixture frame; 
 9     
10   @Before 
11   public void setUp() { 
12     frame = new FrameFixture(new MyFrame()); 
13     frame.show(); 
14   } 
15 
16   @After 
17   public void tearDown() { 
18     frame.cleanUp(); 
19   } 
20 
21   @Test 
22   public void testCopyTextToLabel() { 
23     frame.textBox("input").enterText("Hello World!"); 
24     frame.button("copy").click(); 
25     frame.label("show").requireText("Hello World!"); 
26   } 
27 } 
     下面运行这个测试用例,就可以看到执行情况……貌似还有动画效果,很漂亮。呵呵~~
 
其实这里也只是按照起官方网站上面的Getting Started说明了FEST-Swing的简单用法,更多具体的使用方法请参考网站上面的使用手册。

本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/126828

 
posted @ 2015-05-14 23:25  bbker  阅读(1240)  评论(0编辑  收藏  举报