• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    軟件測試之有關Junit的多線程測試

    發布: 2009-3-30 12:24 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 40次 | 進入軟件測試論壇討論

    領測軟件測試網

    現在把上面例子中的內隱類擴展自net.sourceforge.groboutils.junit.vl.TestRunnable包,我們必須像下面這樣來重寫runTest()方法。
    private class DelayedHello
    extends TestRunnable {
    private String name;
    private DelayedHello(
    String name) {
    this.name = name;
    }
    public void runTest() throws Throwable {
    long l;
    l = Math.round(2 + Math.random() * 3);

    // Sleep between 2-5 seconds
    Thread.sleep(l * 1000);
    System.out.println(
    "Delayed Hello World " + name);
    }
    }

        這時,我們全然不用創建工作線程。MultiThreadedTestRunner將在底層做這件事情,你重寫runTest()方法來替實現run()方法,runTest()方法被后面的MultiThreadedTestRunner類調用———我們自己不會調用它。
    一旦TestRunnable被定義,我們必須定義新的測試用例。在我們的testExampleThread()方法中,我們實例化了幾個TestRunnable對象,并且把它們添加到一個數組中。然后,示例化MultiThreadedTestRunner類,把TestRunnable對象數組做為參數傳遞給這人類的構造子函數,F在,我們有了一個MultiThreadedTestRunner類的實例,我們就可以調用它的runTestRunnables()方法來執行測試。

        MultiThreadedTestRunner(和Junit中的TestRunner不一樣)在繼續執行之前,將等待每一個線程運行終止。它也為通過構造器傳遞給它的每個TestRunnalbe對象創建工作線程并且調用異步的start()方法。這就意味著你沒有必要通過創建你自己的線程來跳過這個障礙———MultiThreadedTestRunner會為你做這件事。下面是ExampleTest的最終版:
    import junit.framework.*;
    import net.sourceforge.groboutils.junit.v1.*;
    public class ExampleTest extends TestCase {
    private TestRunnable testRunnable;
    private class DelayedHello
    extends TestRunnable {
    private String name;
    private DelayedHello(
    String name) {
    this.name = name;
    }
    public void runTest() throws Throwable {
    long l;
    l = Math.round(2 + Math.random() * 3);
    // Sleep between 2-5 seconds
    Thread.sleep(l * 1000);
    System.out.println(
    "Delayed Hello World " + name);
    }
    }
    /**在你的測試用例中使用MultiThreadedTestRunner,
    * MTTR需要一個TestRunnable對象做為它的構造器的參數

    * MTTR創建以后,調用runTestRunnables()方法來運行它
    */
    public void testExampleThread()
    throws Throwable {

    //實例化 TestRunnable 類
    TestRunnable tr1, tr2, tr3;
    tr1 = new DelayedHello("1");
    tr2 = new DelayedHello("2");
    tr3 = new DelayedHello("3");

    //把實例傳遞給 MTTR
    TestRunnable[] trs = {tr1, tr2, tr3};
    MultiThreadedTestRunner mttr =
    new MultiThreadedTestRunner(trs);
    //執行MTTR和線程
    mttr.runTestRunnables();
    }
    /**
    * 標準的 main() 和 suite() 方法
    */
    public static void main (String[] args) {
    String[] name =
    { ExampleTest.class.getName() };
    junit.textui.TestRunner.main(name);
    }
    public static Test suite() {
    return new TestSuite(ExampleTest.class);
    }
    }

        上面的例子中,每個線程將會在你發出測試指令后,在2到5秒之間向你返回它們的輸出,它們不僅按時間顯示,而且是以一個隨機的順序來顯示。這個單元測試只有所有的線程都執行完成后才會結束。由于外加了MultiThreadedTestRunner,所以Junit繼續執行測試用例之前,必須耐心的等待TestRunnables執行完成它們的工作,做為可選項,你可以為MultiThreadedTestRunner的執行分配最大的執行時間(這樣以便你脫離線程,而不掛起測試)。
    要編譯運行ExampleTest,你必須在你的CLASSPATH環境變量中指定junit.jar和GroboUtils-2-core.jar兩個類庫的位置。這樣你就會看到每人線程以隨機的順序來輸出 “Delayed Hedllo World”

    結束語

        寫一個多線程的單元測試不用感到苦腦,GroboUtils類庫為編寫多線程的單元測試提供了一個清晰簡單的API接口,通過把這個類庫添加到你的工具包中,你就可以把單元測試擴展到模擬繁重的WEB網絡通訊和并發的數據庫處理,以及對你的同步方法進行壓力測試。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    44/4<1234

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>