單元測試
u 什麼是單元測試
寫了個類,要給別人用,會不會有bug?怎麼辦?測試一下。
用main方法測試好不好?不好!
1.不能一起運行!
2.大多數情況下需要人爲的觀察輸出確定是否正確
u 單元測試的介紹
Ø 執行單元測試,就是爲了證明這段代碼的行爲和我們期望的一致。
Ø 工廠在組裝一臺電視機之前,會對每個元件都進行測試,這,就是單元測試
Ø 進行充分的單元測試,是提高軟件質量,降低開發成本的必由之路
Ø 對於程序員來說,如果養成了對自己寫的代碼進行單元測試的習慣,不但可以寫出高質量的代碼,而且還能提高編程水平
u Junit
1.JUnit是一種測試代碼的框架,測試的目的是:保證代碼沒錯,而不是保證代碼正確。
2.測試類一般不要和目標類放在一起,但編譯成的class文件是放在一起的。
3.單元測試主要是來測試程序的結果和自己期望的值是否相等
創建測試類的步驟:
1)在工程下面創建一個名爲test 的 Source Folder ,這個源程序文件夾和 src文件夾的階級是相等的
2)測試類和目標類的包名要相同,這樣的好處是測試類就不要import導入目標類的源碼
3)測試類的命名規則:假設目標類的名字是 Calculator,則創建的測試類應命名爲 CalculatorTest 或者 TestCalculator
error 程序本身出錯 比如 將除數設置爲0 ,
failures 測試失敗
@Test :定義一個測試方法的標誌
@Test(timeout=1000) :設置超時時間,如果測試時間超過了你定義的timeout,測試失敗
@Test(expected) : 申明出會發生的異常,比如 @Test(expected =Exception.class)
@Before : 跟junit 3.8 上的setUp() 方法同樣的效果,方法名最好和setUp()一樣,但不強求,在每一個測試方法之前被執行
@After : 跟junit 3.8 上的tearDown() 方法同樣的效果,方法名最好和tearDown()一樣,但不強求,在每一個測試方法之後被執行
@BeforeClass : 被該註解申明的方法,功能是:在所有的測試方法之前執行,只執行一次
@AfterClass : 被該註解申明的方法,功能是:在所有的測試方法之後執行,只執行一次
@Ignore :讓 測試方法 或 測試類 不被執行,讓其失去測試的功能
u 代碼演示
package com.vp.demo;
importstatic org.junit.Assert.*;
import org.junit.Ignore; import org.junit.Test; import org.junit.runners.JUnit4;
publicclass ComputeTest { Compute compute = new Compute();
@Ignore @Test publicvoid testAdd() { // 測試這個加法運算的結果是否在正確的 // 通過斷言來進行判斷 assertEquals(compute.add(1, 2), 3); }
@Test(expected=NullPointerException.class) publicvoid testDiv() { assertEquals(compute.div(null, 3), 3.3, 0.1);
}
}
|
u 測試的分類
1黑盒測試 黑盒,顧名思義,就是把所有東西裝到一個盒子裏,看不到內部邏輯,只能通過外部的可見的功能模塊,對軟件進行測試。比如說一個網站的登陸功能,你不知道它的內部邏輯是怎樣的,只能通過網頁的註冊輸入文本框和註冊按鈕,來測試註冊這個功能是否正常。一般黑盒測試也叫數據驅動測試或者功能測試(通過輸入數據來確定功能是否完整是否正常), 一般它所關注的點如下:1、是否有不正確或遺漏的功能?2、在接口上,輸入是否能正確的接受?能否輸出正確的結果?3、是否有數據結構錯誤或外部信息(例如數據文件)訪問錯誤?4、性能上是否能夠滿足要求?5、是否有初始化或終止性錯誤? 2白盒測試 白盒測試是對軟件的過程性細節做細緻的檢查。這種方法是把測試對象看做一個打開的盒子,它允許測試人員利用程序內部的邏輯結構及有關信息,設計或選擇測試用例,對程序所有邏輯路徑進行測試。通過在不同點檢查程序狀態,確定實際狀態是否與預期的狀態一致。因此白盒測試又稱爲結構測試或邏輯驅動測試。(一般的接口測試也可以理解爲白盒測試,你自己清楚的知道各個業務流的邏輯走向,可以有效的制定一些測試用例,不需要盲目的通過功能點去做各項測試)白盒測試主要是想對程序模塊進行如下檢查:1、對程序模塊的所有獨立的執行路徑至少測試一遍。2、對所有的邏輯判定,取“真"與取“假”的兩種情況都能至少測一遍。3、在循環的邊界和運行的界限內執行循環體。4、測試內部數據結構的有效性,等等。 3.灰盒測試 灰盒測試,是介於白盒測試與黑盒測試之間的,可以這樣理解,灰盒測試關注輸出對於輸入的正確性,同時也關注內部表現,但這種關注不象白盒那樣詳細、完整,只是通過一些表徵性的現象、事件、標誌來判斷內部的運行狀態,有時候輸出是正確的,但內部其實已經錯誤了,這種情況非常多,如果每次都通過白盒測試來操作,效率會很低,因此需要採取這樣的一種灰盒的方法但是實際上灰盒測試用到的領域挺少的
|