亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
有關Junit的多線程測試
作者:網(wǎng)絡轉載 發(fā)布時間:[ 2012/12/11 15:24:23 ] 推薦標簽:

    Junit和許多開源軟件項目集成在一起,但是Junit執(zhí)行多線程的單元測試有一些問題。這篇文章介紹Junit的一個擴展類庫———GroboUtils,這個類庫被設計為來解決這些問題,并且使在Junit中進行單元測試成為可能。對Junit和線程有一個基本的理解是有好處的,但對于本篇文章的讀者來說不是必需的。

介紹

    如果你已經在一個開源的Java項目上工作,或者讀了許多有關“極限編程”和其它“快速開發(fā)模式”的書籍,那么,你很有可能已經聽說過有關Junit的事情。它是由Erich Gamma和Kent Beck編寫的,Junit是一個Java的自動測試的框架,它允許你為你的軟件定義的“單元測試”———不管是測試程序還是功能代碼,通常都是基于方法調用方法的。

    Junit能在很多方面幫助你的開發(fā)團隊———在一些文章中已經包含了很多這方面的介紹。但從一個開者到另一個開發(fā)者,Junit實際上只專箸于兩件事:

1、它強制你使用自己的代碼。你的測試代碼只是作為你的產品代碼的客戶端,從客戶端的描述所獲得的對你的軟件的了解,能夠幫助你標識出在API中的錯誤以及怎樣改進代碼,使其終達到可以使用的目的。

2、它會給你對軟件中改變帶來信心,如果你的測試用例被中斷,你是立刻知道錯誤。在工作結束的時候,如果測試提示是綠色的,則代碼是正確,你可以自信的檢查它。

    但是Junit不是解決所有軟件測試中問題,第三方的擴展類庫,例如HttpUnit,JwebUnit,XMLUnit等,已經認識到這些框架中不足,并且通過添加功能彌補不足,這些不足之一是Junit不包含多線程的單元測試。

    在這篇文章中,我們會看到一個很少有人知道的解決這個問題的擴展類庫。我們通過建立Junit框架開始,并且運行一個例子來展示Junit在線程沒試中的不足。在我們認識了Junit在線程測試方面的不足之后,我們通過一個使用GroboUtils框架的例子來討論GroboUnitls

線程回顧

    對于那些不熟悉線程的人來說,在這一點上是非常不安的(一點都不夸大),離開你的系統(tǒng),我們將對線做一個簡單的介紹。線程允許你的軟件有多個任務,也是說可以同時可做兩件事情。
    在Khalid Mugal和Rolf Rasmussen的書(A Programmer's Guide to Java Certification)中,對線程做了下面這樣的簡短描述:
    一個線程是一個程序中的可執(zhí)行單元,它是被獨立執(zhí)行的。在運行時,在程序中的線程有一個公共的內存空間,因此,能夠共享數(shù)據(jù)和代碼;也是說,它們是輕量級的。它也共享正在運行程序的進程。
Java 線程使運行時環(huán)境異步,它允許不同的任務同時被執(zhí)行。(p.272)

    在web應用程序中,許多用戶可能同時發(fā)請求給你的軟件。當你寫單元測試對你的代碼進行壓力測試時,你需要模擬許多并發(fā)事件,如果你在開發(fā)健壯的中間件,這樣做是尤其重要的。對于這些組件,使用線程測試是一個好的想法。

不幸的是,Junit在這方面是不足的。

有關Junit和多線程測試的問題

    如果你想驗證下列代碼,你需要下載并安裝Junit。按著指示去做,以便能夠在Junit的網(wǎng)站能夠找到它。不要過分追求細節(jié),我們將簡要的介紹Junit是怎樣工作的。要寫一個Junit的測試,你必須首先創(chuàng)建一個擴展于junit.framework.TestCase(Juint中的基本測試類)的測試類。

    Main()方法和suite()方法被用啟動測試。無論是從命令行還是IDE集成開發(fā)環(huán)境窗口,必須確保junit.jar在你的CLASSPATH環(huán)境變量里指定。然后為BadExampleTest.Class類編譯運行下列代碼:
import junit.framework.*;
public class BadExampleTest extends TestCase {
// For now, just verify that the test runs
public void testExampleThread()
throws Throwable {
System.out.println("Hello, World");
}
public static void main (String[] args) {
String[] name =
{ BadExampleTest.class.getName() };
junit.textui.TestRunner.main(name);
}
public static Test suite() {
return new TestSuite(
BadExampleTest.class);
}
}

    運行BadExampleTest來驗證所建立的每一件事情的正確性。一旦,main()被調用,Junit框架將自動的執(zhí)行任意一個用“test”開關命名的方法。繼續(xù)并試著運行測試類。如果你正確的做了每一件事,它應該在輸出窗口打印出“Hello World”。
    現(xiàn)在,我們要給程序添加一個線程類。我將通過擴展java.lang.Runnable接口來做這件事情。后,我們將改變策略,并且擴展一個使線程自動創(chuàng)建的類。
在DelayedHello的構造器中,我們創(chuàng)建一個新的線程并且調用它的start()方法。
import junit.framework.*;
public class BadExampleTest extends TestCase {
private Runnable runnable;
public class DelayedHello
implements Runnable {
private int count;
private Thread worker;
private DelayedHello(int count) {
this.count = count;
worker = new Thread(this);
worker.start();
}
public void run() {
try {
Thread.sleep(count);
System.out.println(
"Delayed Hello World");
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}

public void testExampleThread()
throws Throwable {
System.out.println("Hello, World"); //1
runnable = new DelayedHello(5000); //2
System.out.println("Goodbye, World"); //3
}
public static void main (String[] args) {
String[] name =
{ BadExampleTest.class.getName() };
junit.textui.TestRunner.main(name);
}
public static Test suite() {
return new TestSuite(
BadExampleTest.class);
}
}

上一頁12下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 亚洲欧洲日本在线 | 又黄又变态又免费的视频 | 秋霞97| 色天天综合网色鬼综合 | 成人黄色大片 | 中国一级毛片 | 最新亚洲精品国自产在线 | 国产99在线播放免费 | 亚洲精品一二三四区 | 色天使亚洲综合在线观看 | chinesehihi国产 | 午夜a视频 | 青草娱乐极品免费视频 | 国产精品久久久久影院色老大 | va视频| 欧美日韩亚洲天堂 | 黄色片一级免费看 | 91短视频版高清在线观看免费 | 成人福利| 天天色天天射天天操 | 国产综合成人久久大片91 | 精品视频在线免费看 | 性欧美激情在线观看 | 欧美黑人猛xxxxbbbb | 成人观看免费大片在线观看 | 日本高清网站 | 欧美成人免费在线视频 | 欧美一级片黄色片 | 福利视频观看 | 开心久久激情 | 国产专区精品 | 欧美一区二区三区免费不卡 | 亚洲 欧美 中文 日韩欧美 | 亚洲依依成人综合网站 | 最近更新中文字幕第一页 | 精品一区一区三区新区乱码 | 性大片免费视频观看 | 老司机午夜精品视频在线观看免费 | 日本大蕉香蕉大视频在线观看 | 国产精品亚洲w码日韩中文 国产精品小黄鸭一区二区三区 | 日批免费看 |