<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 4  文章 - 16  trackbacks - 0
    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    新聞檔案

    好友

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 11208
    • 排名 - 2286

    最新評論

    閱讀排行榜

    評論排行榜

    一. 介紹

    JFCUnit 是一款在 JUnit 基礎(chǔ)上針對 Swing GUI 擴(kuò)展的單元測試工具。在同一個應(yīng)用程序中,我們可以通過組件發(fā)現(xiàn)方法查找到組件,模擬用戶動作觸發(fā)組件事件來提供測試驅(qū)動,通過斷言驗證組件狀態(tài)是否正確。

    優(yōu)點(diǎn):

    Ø         繼承了 JUnit ,具有 JUnit 進(jìn)行單元測試的所有優(yōu)點(diǎn);

    Ø         提供了一系列 GUI 組件發(fā)現(xiàn)方法及用戶動作模擬方法。

     

    在讀下面的內(nèi)容之前,您可以先下載“ JFCUnit Example ”。這是一個完整的 eclipse 工程,首先運(yùn)行其中的一個例子,可以使您對 JFCUnit 有一個感官上的了解。

    二. JFCUnit API

    說明:此處僅是簡單介紹,具體使用可以參見“ JFCUnit Example ”。

    1.         GUI 組件發(fā)現(xiàn)類

    a.         通用命名組件發(fā)現(xiàn)類: NamedComponentFinder (java.lang.Class cls, java.lang.String name)

    這個類使用最多,也最容易,但需要在我們的GUI程序中將組件命名(如 cancelBtn.setName(“cancelBtn”)

    示例代碼

    NamedComponentFindercancelBtnFinder   =   new NamedComponentFinder(JButton.class, "cancelBtn");

    JButton cancelBtn = (JButton) cancelBtnFinder.find();

    assertNotNull("cancelBtn not found!", cancelBtn);

    assertEquals(true, cancelBtn.isEnabled());

    b.         其它組件發(fā)現(xiàn)類:

    這一些類主要是針對一些特定的 GUI 組件提供了一些特殊的查找方法。主要有:

    DialogFinder

    FrameFinder

    JLabelFinder

    等等。具體使用可以查找 API 文檔,在 junit.extensions.jfcunit 下的 doc 文檔中。

    示例代碼

            FrameFinder frameFinder = new FrameFinder("FrameDemo"); // 字符串為 Frame 標(biāo)題

           List frames = frameFinder.findAll();

           assertEquals("frames size wrong",1,frames.size());

          JFrame frame = (JFrame)frames.get(0);

           assertNotNull("frame is null !",frame);

     

    2.         用戶動作模擬類

    這些類主要有:

    AbstractMouseEventData

    DragEventData

    JComboBoxMouseEventData

    JListMouseEventData

    JTabbedPaneMouseEventData

    等等。這些類的使用大同小異。在 JFCUnit Example ”也有詳細(xì)的使用例子。下面以表格為例:

           finder.setName( "table" );

           JTable table = (JTable)finder.find(frame, 0); // Frame 中查找到表格

           assertNotNull( "table not found !" ,table);

     

           // 模擬雙擊單元格

    JTableMouseEventDatatableEvent=   new JTableMouseEventData( this ,table,1,2,2);

           helper .enterClickAndLeave(tableEvent);

           this .flushAWT(); // 執(zhí)行事件派發(fā)隊列中的線程 , 保讓事件已經(jīng)被響應(yīng)。

          

           // 模擬改變單元格的文本值

           helper .enterClickAndLeave(tableEvent);

           this .flushAWT();

    helper .sendKeyAction( new KeyEventData( this ,tableEvent.getComponent(),KeyEvent. VK_DELETE ));

    helper .sendString( new StringEventData( this ,tableEvent.getComponent(), "" ));

    helper .sendString( new StringEventData( this ,tableEvent.getComponent(), "wukaichun" ));

           this .flushAWT();

          

           // 模擬多選表格行

    JTableMouseEventDatasrcEvent    =   new JTableMouseEventData( this ,table,1,2,1);

    JTableMouseEventDatasinkEvent  =   new JTableMouseEventData( this ,table,2,2,1);

    helper .enterDragAndLeave( new DragEventData( this ,srcEvent,sinkEvent));

           this .flushAWT();

     

    三. 配置

    對于實際 GUI 項目,往往需要按界面分別進(jìn)行測試。為了多個測試用例共用測試環(huán)境(不必每次都啟動項目),可以將被測工程與 JUnit 一起啟動。而后在 JUnit swingUI 中選取用例執(zhí)行。

    如:

    package person.jfcunit.test;

    import junit.swingui.TestRunner;

     

    public class MainTest {

     

        public static void main(String[] args) {

           LoginScreen.main( new String[]{}); // 啟動被測 GUI 程序

           TestRunner.main( new String[]{}); // 啟動 JUnit

        }

    }

    注意:

    3.       啟動配置中除主函數(shù)變?yōu)?/span> MainTest 外,其它配置與被測工程一樣;

    4.       如果使用 JUnit swingui 測試界面,為了保證所有的組件都為同一加載器加載,需要將被測類改為默認(rèn)加載器加載。

    a.      找到文件 excluded.properties ,在 junit.jar junit.runner 下;

    b.      修改 excluded.properties ,將被測試類添加到 excluded 中,如下:

    #

    # The list of excluded package paths for the TestCaseClassLoader

    #

    excluded.0=sun.*

    excluded.1=com.sun.*

    excluded.2=org.omg.*

    excluded.3=javax.*

    excluded.4=sunw.*

    excluded.5=java.*

    excluded.6=org.w3c.dom.*

    excluded.7=org.xml.sax.*

    excluded.8=net.jini.*

    excluded.9=org.apache.commons.logging.*

    excluded.9=person.*

    在這里列出的包將不使用 TestCaseClassLoader 加載,而是由默認(rèn)加載器加載。如最后一行“ excluded.9=person.* ”,我們將 person 包中的類排除在 TestCaseClassLoader 加載之外。

     

    這個時候,運(yùn)行 MainTest ,您就可以對您的項目進(jìn)行測試了。

     

    四. 結(jié)束語

    寫這篇文章的啟示是對當(dāng)前公司的 GUI 網(wǎng)管進(jìn)行單元測試時的總結(jié)。 JFCUnit 有一定的局限性,它只能針對于擴(kuò)展了 Component GUI 組件進(jìn)行測試。對于 ilog 這類直接由 Object 繼承來的 GUI 則需要使用者自己擴(kuò)展。但其簡單和易用性應(yīng)該能滿足大多數(shù)實際項目的了。

     

    在這里共享出來,希望對使用 Swing 的同仁能有點(diǎn)幫助。文章中有不明白或不正確之處,請不吝賜教。謝謝! Email:wukeichun@163.com

    五. 參考資料

    JFCUnit 測試 GUI 的一個實例(配置篇)   可以了解在 eclipse JFCUnit 的安裝及配置。

    自作聰明的 junit.swingui.TestRunner 其中解釋了使用 swing ui 界面時的類加載器問題,值得一看。

     

    posted on 2006-10-19 20:03 wukaichun 閱讀(2852) 評論(5)  編輯  收藏 所屬分類: test

    FeedBack:
    # re: 使用JFCUnit進(jìn)行GUI單元測試 2006-10-20 08:37 壞男孩
    頂~~~
    搶個沙發(fā)座,哈哈  回復(fù)  更多評論
      
    # re: 使用JFCUnit進(jìn)行GUI單元測試 2006-10-20 09:20 hhh
    好,Swing 同仁也!  回復(fù)  更多評論
      
    # re: 使用JFCUnit進(jìn)行GUI單元測試 2006-10-20 22:59 老姐
    什么亂七八糟的,看不懂,以后別叫我來看了
    ~~~~~  回復(fù)  更多評論
      
    # re: 使用JFCUnit進(jìn)行GUI單元測試 2006-10-22 21:47 阿珠
    小子也有博了啊  回復(fù)  更多評論
      
    # re: 使用JFCUnit進(jìn)行GUI單元測試 2006-10-25 21:44 皇阿瑪
    123,我看好你呦!!  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 最新国产AV无码专区亚洲| 亚洲欧洲中文日产| 亚洲AV成人精品网站在线播放| 国产免费拔擦拔擦8X高清在线人| 亚洲精品成人图区| 在线观看免费亚洲| 小日子的在线观看免费| 亚洲真人无码永久在线观看| 狠狠亚洲婷婷综合色香五月排名 | 国产免费一区二区三区VR| 久久美女网站免费| 亚洲av无码日韩av无码网站冲| 亚洲AV无码一区二区二三区入口| 天天摸天天碰成人免费视频| 久久精品国产免费| 国产精品亚洲二区在线| 亚洲人成网www| 国产a v无码专区亚洲av| 成人午夜性A级毛片免费| 免费国产成人午夜在线观看| 国产精品亚洲色图| 亚洲国产午夜电影在线入口| 一本色道久久综合亚洲精品高清| 无码国产精品一区二区免费虚拟VR| 一区二区免费在线观看| 亚洲一区AV无码少妇电影| 亚洲AV日韩AV永久无码免下载| 亚洲av再在线观看| 男人的好看免费观看在线视频| 免费久久人人爽人人爽av| 日本亚洲高清乱码中文在线观看| 亚洲成A∨人片在线观看无码| 亚洲熟妇av一区二区三区| 免费a级毛片永久免费| 中国在线观看免费高清完整版| 久久久国产精品福利免费| 深夜A级毛片视频免费| 亚洲老熟女五十路老熟女bbw | 亚洲第一香蕉视频| 无码久久精品国产亚洲Av影片| 国产成人亚洲精品91专区手机|