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

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
Junit4單元測試之高級用法
作者:網絡轉載 發布時間:[ 2016/8/19 11:43:33 ] 推薦標簽:單元測試 Junit

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

上一頁12下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 91欧美秘密入口 | 一级成人毛片免费观看 | 亚洲欧美日韩国产 | 欧美人成人亚洲专区中文字幕 | 成人涩涩视频 | 久久只有精品视频 | 精品欧洲videos | 国产偷久久 | 成年女人毛片免费视频 | 深夜福利免费观看 | 天天拍夜夜添久久精品中文 | 成熟女人免费一级毛片 | 日韩中文字幕久久久经典网 | 日本中文字幕一区二区有码在线 | 欧美 日韩 中文字幕 | 久久夜色国产精品噜噜 | 国产一级大片免费看 | 性欧美高清极品猛交 | 日韩看片网站 | 一级视频在线播放 | 日本黄色美女网站 | 欧美操片在线观看 | 日韩欧美亚洲另类 | 国产精品视频国产永久视频 | 日韩国产欧美在线观看一区二区 | 成人欧美日韩高清不卡 | 国产成人精品日本亚洲语音2 | 美女视频永久黄网站免费观看国产 | 欧美黑人巨大3dvideo | 国产精品特黄毛片 | 国产成人午夜精品免费视频 | 午夜亚洲国产成人不卡在线 | 在线观看成年视频 | 国产中日韩一区二区三区 | 国产精品麻豆高清在线观看 | 日本三级香港三级人妇 m | 黄色网页在线观看 | 国产精品一区三区 | 香港经典三级成人xxx | 午夜精品视频在线 | 国产天天色 |