1.Junit概述:
①Junit測(cè)試是程序員測(cè)試,即所謂白盒測(cè)試,因?yàn)槌绦騿T知道被測(cè)試的軟件如何(How)完成功能和完成什么樣(What)的功能。
②Junit測(cè)試是自動(dòng)化測(cè)試的一種方式,它使得bug容易被控制。
③Junit本質(zhì)上是一套框架,即開發(fā)者制定了一套條條框框,遵循這此條條框框要求編寫測(cè)試代碼,如繼承某個(gè)類,實(shí)現(xiàn)某個(gè)接口,可以用Junit進(jìn)行自動(dòng)測(cè)試了。
④由于Junit相對(duì)獨(dú)立于所編寫的代碼,可以測(cè)試代碼的編寫可以先于實(shí)現(xiàn)代碼的編寫,XP 中推崇的 test first design的實(shí)現(xiàn)有了現(xiàn)成的手段:用Junit寫測(cè)試代碼,寫實(shí)現(xiàn)代碼,運(yùn)行測(cè)試,測(cè)試失敗(狀態(tài)條為:紅色),修改實(shí)現(xiàn)代碼,再運(yùn)行測(cè)試,直到測(cè)試成功(狀態(tài)條為:綠色)。以后對(duì)代碼的修改和優(yōu)化,運(yùn)行測(cè)試成功,則修改成功。
2.Junit 相關(guān)使用
①概念:
|- TestCase(測(cè)試用例)--擴(kuò)展Junit的TestCase類的類。它以testXXX方法的形式包含一個(gè)或多個(gè)測(cè)試。一個(gè)testcase把具有公共行為的測(cè)試歸入一組。
|- TestSuite(測(cè)試集合)--組測(cè)試。一個(gè)test suite是吧多個(gè)相關(guān)測(cè)試歸入一組的快捷方式。例如,如果沒有為TestCase 定義一個(gè)test suite,那么Junit會(huì)自動(dòng)提供一個(gè)test suite。包含TestCase中所有測(cè)試。
|- TestRunner(測(cè)試運(yùn)行器)--執(zhí)行test suite的程序。Junit提供了幾個(gè)test runner,可以用來執(zhí)行你的測(cè)試。 沒有TestRunner解開,只有一個(gè)所偶test runner都繼承的BaseTestRunner. 因此,當(dāng)我們編寫TestRunner的時(shí)候,實(shí)際上指的是任何繼承BaseTestRunner的test runner類。
②Junit成員共同產(chǎn)生測(cè)試結(jié)果:
TestCase + TestSuite + BaseTestRunner = TestResult
③JUnit基本框架的結(jié)構(gòu)
|- import聲明引入必須的JUnit類
|- 定義一個(gè)測(cè)試類從TestCase繼承
|- 必需一個(gè)調(diào)用super(String)的構(gòu)造函數(shù)
|- 測(cè)試類包含一些以test..開頭的測(cè)試方法
|- 每個(gè)方法包含一個(gè)或者多個(gè)斷言語(yǔ)句
當(dāng)然還有一些其他的內(nèi)容,但滿足以上幾條的已經(jīng)是一個(gè)JUnit測(cè)試了
④JUnit的命名規(guī)則和習(xí)慣
|- 如果有一個(gè)名為ClassA的被測(cè)試函數(shù),那么測(cè)試類的名稱是TestClassA
|- 如果有一個(gè)名為methodA的被測(cè)試函數(shù),那么測(cè)試函數(shù)的名稱是testMethodA
⑤介紹Test Case、test suite、Test Runner常規(guī)使用: (使用的Eclipse自帶的Junit)。
|-Test Case
Java代碼 復(fù)制代碼
import junit.framework.*; //導(dǎo)入junit.jar包
/*TestXxx繼承自TestCase(命名規(guī)范:一般在類名前加Test)*/
public class TestXxx extends TestCase{
/*測(cè)試方法的具體實(shí)現(xiàn)(命名規(guī)范:以小寫的testXxx形式。否則Junt不會(huì)自動(dòng)識(shí)別該方法為測(cè)試方法)*/
public void testXxx(){};
}
[java] view plaincopy
import junit.framework.*; //導(dǎo)入junit.jar包
/*TestXxx繼承自TestCase(命名規(guī)范:一般在類名前加Test)*/
public class TestXxx extends TestCase{
/*測(cè)試方法的具體實(shí)現(xiàn)(命名規(guī)范:以小寫的testXxx形式。否則Junt不會(huì)自動(dòng)識(shí)別該方法為測(cè)試方法)*/
public void testXxx(){};
}
|-test suite
Java代碼 復(fù)制代碼
import junit.framework.Test;
public static Test suite(){
TestSuite suite = new TestSuite(); //實(shí)例化
suite.addTest(new MoneyTest("testXxx")); //添加測(cè)試方法
suite.addTestSuite(TestMoney.class); //添加整個(gè)測(cè)試到集合中
}
[java] view plaincopy
import junit.framework.Test;
public static Test suite(){
TestSuite suite = new TestSuite(); //實(shí)例化
suite.addTest(new MoneyTest("testXxx")); //添加測(cè)試方法
suite.addTestSuite(TestMoney.class); //添加整個(gè)測(cè)試到集合中
}
|- Test Runner (junit.textui.TestRunner)
Java代碼 復(fù)制代碼
public static void main(String args[]){
junit.textui.TestRunner.run(suite()); //將testsuite 執(zhí)行。
}
[java] view plaincopy
public static void main(String args[]){
junit.textui.TestRunner.run(suite()); //將testsuite 執(zhí)行。
}