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

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

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