您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
使用JUnit進行Java代碼的單元測試
作者:網(wǎng)絡轉載 發(fā)布時間:[ 2013/12/13 14:17:12 ] 推薦標簽:

  接下來我們創(chuàng)建壹?測試類 CalculatorTest.java,代碼如下:
package net.oschina.bairrfhoinn.test;
import static org.junit.Assert.*;
import org.junit.Test;
import net.oschina.bairrfhoinn.main.Calculator;
public class CalculatorTest {
private static Calculator calculator = new Calculator();
@Test
public void testAdd(){
calculator.add(7);
calculator.add(8);
assertEquals(15, calculator.getReuslt());
}
}
  首先,我們要在方法的前面使用@Test標注,以表明這是壹?測試方法。對于方法的聲明也有如下要求:名字可以隨便取,沒有任何限制,但是返回值必須為void,而且不能有任何參數(shù)。如果違反這些規(guī)定,會在運行時拋出壹?異常。至于方法內該寫些什么,那要看你需要測試些什么了。比如上述代碼中,我們想測試壹下add()方法的功能是否正確,在測試方法中調用幾次add函數(shù),初始值為0,先加7,再加8,我們期待的結果應該是15。如果終實際結果也是15,則說明add()方法是正確的,反之說明它是錯的。assertEquals(15, calculator.getResult());是用來判斷期待結果和實際結果是否相等,其中第壹?參數(shù)填寫期待結果,第二?參數(shù)填寫實際結果,也是通過計算得到的結果。這樣寫好之后,JUnit 會自動進行測試并把測試結果反饋給用戶。
  如果想運行它,可以在 eclipse 的資源管理器中選擇該類文件,然后點擊右鍵,選擇 Run As->JUnit Test 即可看到運行結果如下圖所示:

  使用@Test 的屬性 Ignore 指定測試時跳過這?方法
  如果你在寫程序前做了很好的規(guī)劃,那么哪些方法是什么功能都應該實現(xiàn)并且確定下來。因此,即使該方法尚未完成,他的具體功能也是確定的,這也意味著你可以為他編寫測試用例。但是,如果你已經把該方法的測試用例寫完,但該方法尚未完成,那么測試的時候無疑是“失敗”。這種失敗和真正的失敗是有區(qū)別的,因此 JUnit 提供了壹種方法來區(qū)別他們,那是在這種測試函數(shù)的前面加上 @Ignore 標注,這個標注的含義是“某些方法尚未完成,暫不參與此次測試”。這樣的話測試結果會提示你有幾?測試被忽略,而不是失敗。壹旦你完成了相應函數(shù),只需要把@Ignore標注刪去,可以進行正常的測試。
  比如說上面的測試類 Calculator.java 中,假設我們的 Calculator 類的 multiply() 方法沒有實現(xiàn),我們可以在測試類 CalculatorTest 中先寫如下測試代碼:
package net.oschina.bairrfhoinn.test;
import static org.junit.Assert.*;
import org.junit.Ignore;
import org.junit.Test;
import net.oschina.bairrfhoinn.main.Calculator;
public class CalculatorTest {
private static Calculator calculator = new Calculator();
... //此處代碼省略
@Ignore("method square() not implemented, please test this later...")
@Test
public void testSquare(){
calculator.square(3);
assertEquals(9, calculator.getReuslt());
}
}
  我們再運行壹次測試,會看到如下結果,從圖中可以很明顯的看出,方法testSquare() 上的 @Ignore 注解已經生效了,運行時直接跳過了它,而方法testAdd()仍然正常的運行并通過了測試。

  使用注解 @Before 和 @After 來完成前置工作和后置工作
  前置工作通常是指我們的測試方法在運行之前需要做的壹些準備工作,如數(shù)據(jù)庫的連接、文件的加載、輸入數(shù)據(jù)的準備等需要在運行測試方法之前做的事情,都屬于前置工作;類似的,后置工作則是指測試方法在運行之后的壹些要做的事情,如釋放數(shù)據(jù)庫連接、輸入輸出流的關閉等;比如我們上面的測試,由于只聲明了壹? Calculator 對象,他的初始值是0,但是測試完加法操作后,他的值不是0了;接下來測試減法操作,必然要考慮上次加法操作的結果。這是壹?很糟糕的設計!我們非常希望每壹?測試方法都是獨立的,相互之間沒有任何耦合度。因此,我們很有必要在執(zhí)行每壹?測試方法之前,對Calculator對象進行壹?“復原”操作,以消除其他測試造成的影響。因此,“在任何壹?測試方法執(zhí)行之前必須執(zhí)行的代碼”是壹?前置工作,我們用注解 @Before 來標注它,如下例子所示:
package net.oschina.bairrfhoinn.test;
...
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class CalculatorTest {
...//這里省略部分代碼
@Before
public void setUp() throws Exception {
calculator.clear();
}
@After
public void tearDown() throws Exception {
System.out.println("will do sth here...");
}
...//這里省略部分代碼
}

上一頁1234下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd