您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
JUNIT單元測(cè)試
作者:梅花瘦 發(fā)布時(shí)間:[ 2017/6/29 9:38:39 ] 推薦標(biāo)簽:單元測(cè)試 Junit

  我們?cè)诖笮?a href="javascript:;" onClick="javascript:tagshow(event, '程序');" target="_self">程序開發(fā)工作的時(shí)候,需要寫成千上萬個(gè)方法,這些方法的功能可能很強(qiáng)大,但我們?cè)诔绦蛑兄挥玫皆摲椒ǖ囊恍〔糠止δ,并且?jīng)過調(diào)試可以確定,這一小部分功能是正確的。但是,我們同時(shí)應(yīng)該確保每一個(gè)方法都完全正確,因?yàn)槿绻覀兘窈笕绻麑?duì)程序進(jìn)行擴(kuò)展,用到了某個(gè)方法的其他功能,而這個(gè)功能有bug的話,那是一件非常郁悶的事情。所以說,每編寫完一個(gè)方法之后,都應(yīng)該對(duì)這個(gè)方法的方方面面進(jìn)行測(cè)試,這樣的測(cè)試我們稱之為單元測(cè)試。傳統(tǒng)的編程方式,進(jìn)行單元測(cè)試是一件很麻煩的事情,你要重新寫另外一個(gè)程序,在該程序中調(diào)用你需要測(cè)試的方法,并且仔細(xì)觀察運(yùn)行結(jié)果,看看是否有錯(cuò)。正因?yàn)槿绱寺闊,所以程序員們編寫單元測(cè)試的熱情不是很高。于是有一個(gè)牛人推出了單元測(cè)試包,大大簡(jiǎn)化了進(jìn)行單元測(cè)試所要做的工作,這是JUnit4。本文簡(jiǎn)要介紹一下在Eclipse中使用JUnit4進(jìn)行單元測(cè)試的方法。
  一.測(cè)試環(huán)境的搭建:
  1. 被測(cè)試類的創(chuàng)建:

  首先新建一個(gè)項(xiàng)目叫JUnit_Test,我們編寫一個(gè)Calculator類,這是一個(gè)能夠簡(jiǎn)單實(shí)現(xiàn)加減乘除、平方、開方的計(jì)算器類,然后對(duì)這些功能進(jìn)行單元測(cè)試。這個(gè)類并不是很完美,我們故意保留了一些Bug用于演示,這些Bug在注釋中都有說明。該類代碼如下:
  public class Calculator {
  // 靜態(tài)變量,用于存儲(chǔ)運(yùn)行結(jié)果
  private static double result;
  public void add(double n) {
  result = result + n;
  }
  //Bug: 正確的應(yīng)該是 result = result-n
  public void substract(double n) {
  result = result - 1; 
  }
  public void multiply(double n) {
  // 此方法尚未寫好
  }
  public void divide(double n) {
  result = result / n;
  }
  public void square(double n) {
  result = n * n;
  }
  //Bug : 死循環(huán)
  public void squareRoot(double n) {
  for (; ;) ;           
  }
  // 將結(jié)果清零
  public void clear() {
  result = 0;
  }
  public double getResult() {
  return result;
  }
  }
  2. 測(cè)試類的創(chuàng)建:
  在Eclipse中創(chuàng)建單元測(cè)試類:
  (1).New --> Junit Test Case

  (2).選擇要覆蓋的方法

  (3).生成模板:
  public class CalculatorTest {
  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
  }
  @AfterClass
  public static void tearDownAfterClass() throws Exception {
  }
  @Before
  public void setUp() throws Exception {
  }
  @After
  public void tearDown() throws Exception {
  }
  @Test
  public void testAdd() {
  fail("Not yet implemented");
  }
  @Test
  public void testSubstract() {
  fail("Not yet implemented");
  }
  @Test
  public void testMultiply() {
  fail("Not yet implemented");
  }
  @Test
  public void testDivide() {
  fail("Not yet implemented");
  }
  @Test
  public void testSquare() {
  fail("Not yet implemented");
  }
  @Test
  public void testSquareRoot() {
  fail("Not yet implemented");
  }
  @Test
  public void testClear() {
  fail("Not yet implemented");
  }
  @Test
  public void testGetResult() {
  fail("Not yet implemented");
  }
  }
  二、單元測(cè)試類的編寫:
  1. 前置和后置方法設(shè)置:

  private static Calculator calculator;
  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
  calculator = new Calculator();
  }
  @AfterClass
  public static void tearDownAfterClass() throws Exception {
  calculator = null;
  }
  @Before
  public void setUp() throws Exception {
  calculator.clear();
  }
  @After
  public void tearDown() throws Exception {
  calculator.clear();
  }
  (2). 測(cè)試類的設(shè)置:   
  @Test
  public void testAdd() {
  calculator.add(2);
  calculator.add(3);
  assertEquals(5, calculator.getResult());
  }
  (3). 忽略位完成的測(cè)試類:@Ignore
  @Test
  @Ignore
  public void testSubstract() {
  fail("Not yet implemented");
  }
  (4). 測(cè)試:
  @Test(timeout  =   1000 )
  public void testSquare() {
  calculator.squareRoot( 4 );
  assertEquals( 2 , calculator.getResult());
  }
  (5). 異常測(cè)試:
  @Test(expected  =  ArithmeticException. class )
  public void testDivide() {
  calculator.divide( 0 );
  }

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