JUnit單元測試的介紹以及基本操作

Junit介紹

????■Juint由Erich Gamma和Kent Beck編寫的一個測試框架

????■開源軟件

????■支持語音有Smalltalk,Java,C++,Perl等

????■支持的IDE:JBuilder透乾,VisualAge欧募,Eclipse等

????■Junit測試是程序員測試谍婉,即所謂白盒測試,因為程序員知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能

常用的測試基本概念

????■白盒測試:程序內(nèi)部的邏輯結(jié)構(gòu)和其他信息對測試人員是公開的

????■回歸測試:軟件或環(huán)境的修復或更正后的“再測試”,自動測試工具對這類測試尤其有用

????■單元測試:是最小顆粒度的測試辽社,以測試某個功能或代碼塊费什。一般由程序員來做钾恢,因為它需要知道內(nèi)部設計和編碼的細節(jié)

????■JUnit:是一個開發(fā)源代碼的Java測試框架,用于編寫和運行可重復的測試鸳址。他是用于單元測試框架體系xUnit的一個實例(用于Java語言)瘩蚪。主要用于白盒測試,回歸測試

單元測試工具

目前最流行的單元測試工具是xUnit系列框架稿黍,常用的根據(jù)語言不同分為

????■Junit(java)

????■Cppunit(C)

????■DUnit(Delphi)

????■Nunit(.net)

????■PhpUnit(Php)

????■Pyunit(Python)等

在Eclipse中配置好Junit

????1.在該項目上點右鍵疹瘦,點“屬性”

????2.選擇“Java Build Path”,選擇“Libraries”標簽巡球,點擊“Add Library”按鈕言沐,彈出Add Libray窗體,選中“Junit”酣栈,單擊“Next”

生成Junit的測試用例框架

????■在Eclipse的Package Explorer中右擊Calculate.java呢灶,選擇new-->“Junit Test Case”

????■setUpBeforeClass():調(diào)用這個測試類的時候,會先執(zhí)行setUpBeforeClass的內(nèi)容钉嘹。只會被執(zhí)行一次(因為測試類只會被調(diào)用一次鸯乃,所以它只會執(zhí)行一次),主要用于初始化

????■tearDownAfterClass():測試類所有方法都被執(zhí)行之后,它會執(zhí)行該方法缨睡,只會被執(zhí)行一次鸟悴。初始化工作做一些執(zhí)行后處理,例如關(guān)閉和數(shù)據(jù)庫的連接

????■setUp():每個測試用例執(zhí)行的時候奖年,都會執(zhí)行setUp()

????■tearDown():每次測試用例執(zhí)行后细诸,都會執(zhí)行tearDown()

????■Class?under?test:選擇被測試類,可以直接輸入類名/Browse

單元測試基本思想:通過斷言來判斷陋守,期望值與實際值比對震贵,一致的話,斷言成功水评。如果不一致則失敗猩系。

????■測試類是一個獨立的類,沒有任何父類中燥。測試類的名字也可以任意命名寇甸,沒有任何局限性。但是建議都用類名+Test來命名

????■我們不能通過類的聲明來判斷它是不是一個測試類疗涉,它與普通類的去唄在于它內(nèi)部的方法和聲明

創(chuàng)建一個待測試類的對象

Private static Calculator calculator= new Calculator();

????■需要測試哪個類拿霉,首先就要創(chuàng)建該類的對象

????■為了測試Calculater類,我們必須創(chuàng)建一個calculator對象

測試方法的聲明

????■在測試類中咱扣,并不是每個方法都是用于測試的绽淘,必須使用“標注”來明確表明哪些是測試方法

????? ? ◆@Before

????? ? ◆@Test:表明這是一個測試方法

????? ? ◆?@Ignore:跳過,不執(zhí)行

????■方法名可以隨便取闹伪,沒有任何限制沪铭,但是規(guī)范寫法是test+方法名,方法名首字母大寫

????■方法的返回值必須為void

????■方法不能有任何參數(shù)

????■如果違反這些規(guī)范祭往,運行時會拋出一個異常

測試方法的例子——@test

? ? @Test

?? ?? ? public void testAdd(){

?? ??? ?? ? calculator.add(2);

?? ??? ?? ? calculator.add(3);

?? ??? ?? ? assertEquals(5,calculator.getResult());?? ?//判斷期待結(jié)果和實際結(jié)果是否相等

? ? }

????■我們期待的結(jié)果應該是5

????■第一個參數(shù)填寫期待結(jié)果伦意,第二個參數(shù)填寫實際結(jié)果

????■JUnit會自動進行測試并把測試結(jié)果反饋給用戶

測試方法的例子——@Ignore

? ? @Ignore("Mulctiply() Not yet implented")

? ? public void testMultiply(){?? ?

?? ?}

????■加上@Ignore標注的含義就是“某些方法尚未完成,暫不參與此次測試”

????■這樣的話測試結(jié)果就會提示你又幾個測試被忽略硼补,而不是失敗

@Before和@After

? ? @Before

? ? public void setUp() throws Exception{

?? ?? ? calculator.clear();

? ? {?

? ? @After

? ? public void tearDown() throws Exception{

? ? }

????■@Before,@After是每個方法測試時候必然被調(diào)用的代碼

????■保證每個測試都是獨立的驮肉,相互之間沒有任何耦合度

????■這里不需要@Test標注,因為這不是一個test

測試開始-->setUp-->test*****-->tearDown-->測試結(jié)束


@BeforeClass或@AfterClass

????■只在測試用例初始化執(zhí)行@BeforeCalss方法已骇,當所有測試執(zhí)行完畢后离钝,執(zhí)行@AfterClass進行收尾工作

????■用于測試讀取文件等耗時的方法

????■該方法必須是public和static的

????■注意:@BeforeClass和@AfterClass只執(zhí)行一次

????■@Before,@After是每個測試用例執(zhí)行的時候都會執(zhí)行

限時測試

? ? @Test(timeout=2000)//設置超時時間為2000ms

? ? public?void?testDivide(){

?? ?? ? for( ; ;)褪储;//死循環(huán)

?? ?}

????■對于邏輯很復雜卵渴,循環(huán)嵌套比較深的程序采用限時測試

????■函數(shù)設定一個執(zhí)行時間,超過了這個時間鲤竹,他們就會被系統(tǒng)強行終止浪读,并且系統(tǒng)還會向你匯報該函數(shù)結(jié)束的原因是因為超時

測試異常

@Test(expected = ArithmeticException.class)

public void divideByZero(){

? ? calculator.divide(0);

}

????■expected屬性用來測試函數(shù)應該拋出的異常

Runner(運行器)

????■JUnit中有一個默認的Runner,如果你沒有指定,那么系統(tǒng)自動使用默認Runner來運行你的代碼

????■@RunWith是用來修飾類碘橘,可以指定需要的Runner

參數(shù)化測試

可以將所有參數(shù)集中起來一次測試互订。步驟如下:

????1.為這種測試專門生成一個新的類

????2.定義一個待測試的類,并且定義兩個變量痘拆,一個用于存放參數(shù)仰禽,一個用于存放期待的結(jié)果

????3.定義測試數(shù)據(jù)的集合,用@Papameters標注進行修飾

????4.創(chuàng)建構(gòu)造函數(shù)對先前定義的兩個參數(shù)進行初始化


參數(shù)化測試

??■數(shù)據(jù)驅(qū)動:用多組不同的數(shù)據(jù)執(zhí)行相同的腳本——腳本是固定的纺蛆,但是測試數(shù)據(jù)是變化的吐葵,一組數(shù)據(jù)或多組數(shù)據(jù)

? ?■ 關(guān)鍵字驅(qū)動:操作元素,操作動作桥氏,輸入的值温峭,三個都可以自定義

可以將所有參數(shù)集中起來一次測試。步驟如下:

????1.為這種測試專門生成一個新的類

????2.定義一個待測試的類识颊,并且定義兩個變量诚镰,一個用于存放參數(shù)奕坟,一個用于存放期待的結(jié)果

????3.定義測試數(shù)據(jù)的集合祥款,用@Papameters標注進行修飾

????4.創(chuàng)建構(gòu)造函數(shù)對先前定義的兩個參數(shù)進行初始化

測試集

步驟:

????1.用@RunWith標注傳遞一個參數(shù)Suite.class

????2.用@Suite.SuiteClasses表明這個類是一個打包測試類

????3.把需要打包的類作為參數(shù)傳遞給該標注

對于一些比較大,較長期且相對于需求越穩(wěn)定的項目月杉,非常適合底層的單元測試的方式來進行刃跛,整體的質(zhì)量會提高,效率也很高

推薦書籍:單元測試的藝術(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苛萎,一起剝皮案震驚了整個濱河市桨昙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腌歉,老刑警劉巖蛙酪,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異翘盖,居然都是意外死亡桂塞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門馍驯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阁危,“玉大人,你說我怎么就攤上這事汰瘫】翊颍” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵混弥,是天一觀的道長趴乡。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么晾捏? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任官辽,我火速辦了婚禮,結(jié)果婚禮上粟瞬,老公的妹妹穿的比我還像新娘同仆。我一直安慰自己,他們只是感情好裙品,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布俗批。 她就那樣靜靜地躺著,像睡著了一般市怎。 火紅的嫁衣襯著肌膚如雪岁忘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天区匠,我揣著相機與錄音干像,去河邊找鬼。 笑死驰弄,一個胖子當著我的面吹牛麻汰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沟优!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起位喂,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乱灵,沒想到半個月后塑崖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡痛倚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年规婆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片状原。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡聋呢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颠区,到底是詐尸還是另有隱情削锰,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布毕莱,位于F島的核電站器贩,受9級特大地震影響颅夺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛹稍,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一吧黄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唆姐,春花似錦拗慨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至声功,卻和暖如春烦却,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背先巴。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工其爵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伸蚯。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓摩渺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親朝卒。 傳聞我的和親對象是個殘疾皇子证逻,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理乐埠,服務發(fā)現(xiàn)抗斤,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 1 單元測試與Junit4測試框架: 單元測試:是指對軟件中的最小可測試單元進行檢查和驗證丈咐。在java應用程序中常...
    Aubade閱讀 1,031評論 0 0
  • 1. 單元測試入門——優(yōu)秀基因 單元測試最初興起于敏捷社區(qū)瑞眼。1997年,設計模式四巨頭之一Erich Gamma和...
    厲鉚兄閱讀 2,653評論 3 16
  • 多少年來棵逊,父親的背影在我的心中日漸模糊伤疙,但每當回憶起來,內(nèi)心總有一縷縷溫暖如光的記憶辆影。 印象中的父親徒像,總是那樣年輕...
    紅葉竹馬閱讀 396評論 0 14
  • 車終于開了, 我像第一次那樣蛙讥, 審視著窗外的一切锯蛀。 連綿的山坡, 夾著一道道裂痕次慢, 就像久違的擁抱旁涤。 回來了翔曲? 回...
    一曲長歌婉轉(zhuǎn)閱讀 227評論 0 3