使用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/126828php

相關文章
相關標籤/搜索