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

  三、Category------繼承自Suit,更強(qiáng)大,它可以讓我們對(duì)測(cè)試類(lèi)中被測(cè)試的方法進(jìn)行分類(lèi)執(zhí)行,例如Person對(duì)象具有一些屬性,這些屬性擁有g(shù)et/set方法,同時(shí)還有一些普通方法。我們可以將獲取屬性的get方法和普通方法進(jìn)行分類(lèi)測(cè)試。如:
public class PersonTest{
@Category(AttributeFun.class)
@Test
public void testGetAge(){
int age = person.getAge();
assertEquals(3, age);
}
@Category(AttributeFun.class)
@Test
public void testGetName(){
String name = person.getName();
assertEquals("Willard", name);
}
@Category(BehaviorFun.class)
@Test
public void testTalk(){
String message = person.talkTo("Jimy");
assertNotNull(message);
}
@Category(BehaviorFun.class)
@Test(timeout=200)
public void testWalk(){
person.walk();
}
}
//對(duì)應(yīng)的測(cè)試執(zhí)行代碼如下:
@RunWith(Categories.class)
@SuiteClasses(PersonTest.class)
@IncludeCategory(AttributeFun.class)
public class CategoryTest{
//注意,如果不加@IncludeCategory注解,那么和使用Suit具有一樣的效果了。
}
  四、Theories------雖意為原理或推測(cè)的意思,但我在這里以更直觀的方式表述它:提供一組參數(shù)的排列組合值作為待沒(méi)方法的輸入?yún)?shù)。同時(shí)注意到在使用Theories這個(gè)Runner的時(shí)候,我們的待測(cè)方法可以擁有輸入?yún)?shù),而這在其它的Runner中的測(cè)試方法是不成的。下面是一個(gè)例子:
@RunWith(Theories.class)public class TheoriesTest{
@DataPoint
public static String nameValue1 = "Tony";
@DataPoint
public static String nameValue2 = "Jim";
@DataPoint    public static int ageValue1 = 10;
@DataPoint
public static int ageValue2 = 20;
@Theory
public void testMethod(String name, int age){
System.out.println(String.format("%s's age is %s", name, age));
}
}
  上面的代碼的意思是,將”Tony”、”Jim”、10、20四個(gè)參數(shù)以類(lèi)型合法的排列組合傳給待沒(méi)方法。因此輸出的結(jié)果必然也有2x2=4種:
  Tony's age is 10
  Tony's age is 20
  Jim's age is 10
  Jim's age is 20
  不過(guò),為了簡(jiǎn)單,我們除了可以使用@DataPoint注解來(lái)提供參數(shù)之外,還可以通過(guò)@DataPoints注解來(lái)提供參數(shù),參照上述代碼,只需要將@DataPoint注解標(biāo)注的四個(gè)字段參數(shù)替換為如下的兩個(gè)即可:
  @DataPoints
  public static String[] names = {"Tony", "Jim"};
  @DataPoints
  public static int[] ageValue1 = {10, 20};
  上展示了四個(gè)Junit運(yùn)行器的使用示例,有這個(gè)四個(gè)運(yùn)行器的支持,基本上大部分的測(cè)試需求得可以得到解決。當(dāng)然Junit提供的功能遠(yuǎn)不止這些。除此之外,我們還可以使用Junit4提供的Rule/Assume/Assert等。
  其中使用Rule可以為單元測(cè)試指定測(cè)試規(guī)則,下面展示了這些可用的Rule:
  Verifier: 驗(yàn)證測(cè)試執(zhí)行結(jié)果的正確性。
  ErrorCollector: 收集測(cè)試方法中出現(xiàn)的錯(cuò)誤信息,測(cè)試不會(huì)中斷,如果有錯(cuò)誤發(fā)生測(cè)試結(jié)束后會(huì)標(biāo)記失敗。
  ExpectedException: 提供靈活的異常驗(yàn)證功能。
  Timeout: 用于測(cè)試超時(shí)的Rule。
  ExternalResource: 外部資源管理。
  TemporaryFolder: 在JUnit的測(cè)試執(zhí)行前后,創(chuàng)建和刪除新的臨時(shí)目錄。
  TestWatcher: 監(jiān)視測(cè)試方法生命周期的各個(gè)階段。
  TestName: 在測(cè)試方法執(zhí)行過(guò)程中提供獲取測(cè)試名字的能力。
  此外,Assume表示假設(shè),但它實(shí)際是對(duì)待沒(méi)方法的參數(shù)進(jìn)行合法性校驗(yàn)的,如果校驗(yàn)不合格則直接拋異常,而不執(zhí)行測(cè)試。這和Guava中的Predictions類(lèi)似。Assume提供的校驗(yàn)規(guī)則如下:
  assumeTrue/assumeFalse、 assumeNotNull、 assumeThat、 assumeNoException
  例如:(通過(guò)下述代碼也可以看到,要使用參數(shù),則應(yīng)使用@Theory注解)
  @Theory
  public void printAge(String name, int age){
  Assume.assumeTrue(age > 0);//如果參數(shù)age<=0,會(huì)拋AssumptionViolatedException異常
  System.out.println(String.format("%s's Name is %s.", name, age));
  }
  Assert是Junit提供的斷言,與Assume不同,Assert是對(duì)測(cè)試結(jié)果的校驗(yàn),它提供的檢驗(yàn)規(guī)則如下:
  AssertTrue、AssertFalse:結(jié)果的true、false。
  AssertThat:使用Matcher做自定義的校驗(yàn)。
  AssertEquals、AssertNotEquals:判斷兩個(gè)對(duì)象是否相等。
  AssertNull、AssertNotNull:判斷對(duì)象是否為空。
  AssertSame:判斷兩個(gè)對(duì)象是否為同一個(gè),不同于equals這里是使用“==”判斷。
  AssertArrayEquals:判斷兩個(gè)數(shù)組是否相等。

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