名詞解釋:
- Junit:眾所周知的單元測(cè)試。 官方網(wǎng)址:http://junit.sourceforge.net/。Junit從4.0開(kāi)始提供基于注解的配置方式。
- Dbunit: 一個(gè)針對(duì)數(shù)據(jù)庫(kù)測(cè)試的框架,通過(guò)Excel準(zhǔn)備數(shù)據(jù)并插入數(shù)據(jù)庫(kù)。官方地址:http://www.dbunit.org/
- TestNG:從字面上可以理解為下一代單元測(cè)試,和Junit的功能有一部分重疊和區(qū)別。TestNG也有Eclipse插件,官方地址http://testng.org/doc/index.html
- Unitiles: 讓單元測(cè)試變得更加容易和可維護(hù),Unitils構(gòu)建在DBUnit之上并與JUnit和TestNG相結(jié)合。官方地址:http://www.unitils.org
- Jmock:JMock是一個(gè)JAVA開(kāi)發(fā)包,它支持Mock(模擬)對(duì)象機(jī)制的TDD(測(cè)試驅(qū)動(dòng)開(kāi)發(fā)),官方地址:http://www.jmock.org/
什么是Jtester?
jTester是一個(gè)基于java的單元測(cè)試框架。開(kāi)源地址:http://code.google.com/p/java-tester/。
為什么要用Jtester?
JTester是站在眾多巨人肩膀上的單元測(cè)試框架,集成了Junit4.5,dbunit2.4.3,unitils2.2,JMOCK2.5和TestNg5.1這些優(yōu)秀的開(kāi)源框架,并在這些框架上做了擴(kuò)展,使得單元測(cè)試更加方便和強(qiáng)大。
Jtester帶給了我們什么?
1、在unitils的基礎(chǔ),集成了jmock功能。
2、在hamcrest斷言的基礎(chǔ)上,實(shí)現(xiàn)了fluent interface斷言。
3、改造了jmock expectation參數(shù)斷言為fluent interface形式
4、錄制對(duì)象:提供了將普通的pojo對(duì)象序列化到文件,然后再?gòu)奈募蟹葱蛄谢貋?lái)的功能,用于在對(duì)象復(fù)雜的情況下,直接錄制接口(遠(yuǎn)程接口)調(diào)用返回的對(duì)象,以供下次測(cè)試或調(diào)試使用。
5、數(shù)據(jù)測(cè)試:使用wiki代替xml來(lái)準(zhǔn)備測(cè)試數(shù)據(jù)。比dbunit更快準(zhǔn)備數(shù)據(jù)。
6、實(shí)現(xiàn)了更加豐富的斷言。比junit的斷言多。
7、提供了hibernate annotation環(huán)境下,直接使用內(nèi)存數(shù)據(jù)庫(kù)進(jìn)行db測(cè)試。
8、提供了hibernate annotation環(huán)境下,Open Test in Session的實(shí)現(xiàn)。
以上8大特性來(lái)自于官方,我稍加了點(diǎn)說(shuō)明和整理。?
?
七步進(jìn)入Jtester世界。?下面讓我們花一個(gè)泡面的時(shí)間來(lái)學(xué)習(xí)下Jtester吧。
import mockit.NonStrict; import org.jtester.testng.JTester; import org.jtester.unitils.jmockit.MockedBean; import org.testng.annotations.Test; import org.unitils.spring.annotation.SpringApplicationContext; import org.unitils.spring.annotation.SpringBean; /** * Jtester測(cè)試?yán)樱凑兆⑨岉樞驅(qū)W習(xí) * * @author tengfei.fangtf */ @SpringApplicationContext( { "applicationContext.xml" }) // 1.@SpringApplicationContext:加載Spring 配置文件,所有測(cè)試相關(guān)的bean都在這個(gè)容器中; public class BusinessTestCase extends JTester// 2.JTester:要使用JTester // 提供的功能,需要繼承此基類; { @SpringBean("businessService") // 3.@SpringBean:從容器中取出指定id 的bean 并注入到測(cè)試類中 private AppInternalService businessService; @MockedBean @NonStrict // 4.@Mocked @MockedBean:mock 出一個(gè)對(duì)象,并將該對(duì)象與Spring 容器結(jié)合,實(shí)現(xiàn)Autowired; private OneHessianServiceClient hessianClient; @Test(groups = { "FirstTestGroup" }) // 5.@Test;TestNG 的注解;指明此方法為一個(gè)TestCase; public void testBusinessNormal() { new Expectations() {// 6.設(shè)置mock 對(duì)象的期望返回值 { hessianClient.hessianServiceInvorke(anyString); result = "HH";// 那么執(zhí)行這個(gè)方法,永遠(yuǎn)都返回HH } }; String returnResult = businessService .bussinessService("Sample Business!"); System.out.println("\n ---> " + returnResult);// 輸出HH want.string(returnResult).notNull();// want:JTester 框架提供的強(qiáng)大的斷言; } }
?
已有 8 人發(fā)表留言,猛擊->>這里<<-參與討論
JavaEye推薦