亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
Junit4單元測試之高級用法
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2016/8/19 11:43:33 ] 推薦標(biāo)簽:單元測試 Junit

  Junit單元測試框架是Java程序開發(fā)必備的測試?yán)鳎F(xiàn)在常用的是Junit4了,在Junit4中所有的測試用例都使用了注解的形式,這比Junit3更加靈活與方便。之前在公司的關(guān)于單元測試的培訓(xùn)課程中,講師僅僅講述了Junit4的基本的與生命周期相關(guān)的注解的使用,主要包括@BeforeClass、@Before、@Test、@After、@AfterClass這些注解,這些在應(yīng)付普通簡單的單元測試已經(jīng)足夠,然而有很多更加復(fù)雜且也會(huì)經(jīng)常遇到的測試需求依靠這些生命周期注解并不能完成!因此這篇分享將為您呈現(xiàn)Junit4的另一片新大陸,且看陳述…
  其實(shí),在單元測試培訓(xùn)課程中,講師并沒有講到Junit4的核心,例如為什么Junit沒有main()方法能運(yùn)行(因?yàn)槲覀冎罒o論是什么程序都必須得有一個(gè)程序入口,而它通常是main);在例如Junit的核心組成部分是什么?如何更改Junit在運(yùn)行單元測試時(shí)獲取數(shù)據(jù)和執(zhí)行測試的行為?更具體一點(diǎn),如果我要為一個(gè)需要兩個(gè)參數(shù)的方法進(jìn)行測試,如何使用我所提供的參數(shù)的所有排列組合對方法進(jìn)行測試?如果我需要在茫茫的測試用例中只測試與特定類相關(guān)的用例該怎么做…….
  在這之前,先糾正一點(diǎn)------Junit4可以直接運(yùn)行我們的某個(gè)方法,沒有main入口函數(shù)是斷然不行的。正如我之前給我們組的一個(gè)妹子講Spring的時(shí)候告訴她,在測試方法中,對測試方法所在的類添加Spring的 (Compent注解或者為該類的成員變量添加)Resource注解并沒有什么卵用,即Spring根本不會(huì)來掃描這個(gè)測試類,更不會(huì)為這個(gè)類注入屬性值。為什么這么說呢?因?yàn)镾pring是在測試類中由被@Before標(biāo)注的方法所啟動(dòng)的,這時(shí)候,JVM已經(jīng)將此測試類實(shí)例化了,而這并不是由Spring實(shí)例化的,Spring晚了一步,所以在Spring的容器中并沒有此類的實(shí)例。那么Junit4真的有main方法嗎?沒錯(cuò),既然它能直接運(yùn)行我們的方法,那它必然自己為JVM提供了程序入口。其實(shí)在org.junit.runner包下,有個(gè)JUnitCore.class,其中有一個(gè) 標(biāo)準(zhǔn)的main方法,這是JUnit入口函數(shù)。如此看來,它其實(shí)和我們直接在自己的main方法中跑我們要測試的方法在本質(zhì)上是一樣的。
  接下來,我要說的是Junit測試框架的新大陸,或者說是其核心組件,也正是講師所沒有講到但卻十分有用的東西------Runner,即Junit的運(yùn)行器!
  Runner只是一個(gè)抽象類,表示用于運(yùn)行Junit測試用例的工具,通過它可以運(yùn)行測試并通知Notifier運(yùn)行的結(jié)果。通常我們可以在待測方法所在的類之上使用@RunWith注解來為這個(gè)測試類指定一個(gè)特定的Runner。不過在很多情況下,我們并沒有這么做,那是因?yàn)椋覀兪褂昧薐unit的默認(rèn)Runnner------BlockJunit4ClassRunner。當(dāng)我們不為測試類添加@RunWith注解的時(shí)候,其實(shí)使用的是這個(gè)Runner,它作為默認(rèn)Runner只為我們提供了基本的基于Junit生命周期的測試注解。而有更多非常規(guī)的測試需求,則需要我們?yōu)闇y試類添加@RunWith注解并指定特定的Runner來完成!下面列出一些比較有用的Runner。
  一、Suit------它可以一次生執(zhí)行全面在多個(gè)類中的測試用例,例如:
  @RunWith(Suite.class)
  @SuiteClasses({Person.class, People.class})
  public class TestSuitMain{
  //雖然這個(gè)類是空的,但依然可以運(yùn)行Junit測試,運(yùn)行時(shí),它會(huì)將Person.class和//People.class中的所有測試用命都執(zhí)行一遍!
  }
  二、Parameterized------在普通的單元測試中被@Test注解標(biāo)注的測試方法只能是public void的,且不能有任何輸入?yún)?shù)。而這時(shí)常會(huì)給我們造成困擾,因?yàn)橛袝r(shí)候我們需要為測試方法輸入?yún)?shù),甚至是批量指定多個(gè)待測參數(shù)。這時(shí)Parameterized這個(gè)Runner能滿足我們的要求,用法如下:
@RunWith(Parameterized.class)
public class TestGenerateParams{
private String greeting;
public TestGenerateParams(String greeting){
super();
this.greeting = greeting;
}
@Test
public void testParams(){        System.out.println(greeting);
}
/**
* 這里的返回的應(yīng)該是一個(gè)可迭代數(shù)組,且方法必須是public static
* @return
*/
@Parameters
public static List getParams(){
return Arrays.asList(new String[][]{{"hello"},{"hi"},{"good morning"},{"how are you"}});
}
}

上一頁12下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 一个人看的手机视频www | 久久精品国产精品青草不卡 | 久草日韩 | 日日碰狠狠添天天爽 | 国产不卡在线视频 | 看全色黄大色黄大片女图片 | 欧美日韩国产手机在线观看视频 | 伊人五月婷婷 | 五月婷婷丁香综合 | 性欧美videos另类视频 | 国产精品2020观看久久 | 久青草视频在线播放 | 夜夜操女人 | 亚洲美女爱做色禁图无遮 | 国产一区视频在线免费观看 | 伦理在线观看 | 午夜在线观看视频在线播放版 | 任我鲁这里有精品视频在线播 | 生活片一级播放免费 | 欧美日韩一卡二卡 | 7m国产精品分类视频大全 | 亚洲天天看 | 动漫精品一区二区三区视频 | 欧美日韩精品福利在线观看 | 强制高潮18xxxxhd日韩 | 最近在线观看免费完整视频 | 在线满18网站观看视频 | 国内精品综合九九久久精品 | 国产精品莉莉欧美自在线线 | 成人免费手机在线看网站 | 真人午夜a一级毛片 | 天堂亚洲欧美日韩一区二区 | 免费看欧美一级特黄a大片 免费看欧美一级特黄α大片 | jizz国产丝袜18老师美女 | 亚洲精品无码不卡在线播放he | 中文字幕美日韩在线高清 | 草草影院欧美 | 老司机成人午夜精品福利视频 | 欧美黑人巨大日本人又爽又色 | 免费大片黄在线现看国语 | 日韩精品特黄毛片免费看 |