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

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
JUnit擴展:引入新注解Annotation
作者:網絡轉載 發布時間:[ 2015/4/17 10:48:13 ] 推薦標簽:Junit 單元測試 Annotation

  這樣可以通過BlockJunit4ClassRunner直接調用:
public class EntryToRunCases
{
public static void main(String... args)
{
if(args != null)
{
System.out.println("Parameters: " + args[0]);
Filter customeFilter = new FilterCollections(args[0]);
EntryToRunCases instance = new EntryToRunCases();
instance.runTestCases(customeFilter);
}
else
{
System.out.println("No parameters were input!");
}
}
protected void runTestCases(Filter aFilter)
{
BlockJUnit4ClassRunner aRunner = null;
try
{
try
{
aRunner = new BlockJUnit4ClassRunner(JunitTest.class);
}
catch(InitializationError e)
{
System.out.print(e.getMessage());
}
aRunner.filter(aFilter);
aRunner.run(new RunNotifier());
}
catch(NoTestsRemainException e)
{
System.out.print(e.getMessage());
}
}
}
  這種方法要比上面IBM的實現,簡單很多,不需要包裝一些不必要的類了。
  但是我們仍然發現它還有兩個不方便的地方:
  要想跑哪些測試文件,必須把相應的測試Class,一條條加進來,這是JUnit固有的缺陷,Categories是解決這個問題,但是它不識別我們自定義的注解
  Case是通過Java Application Main方法來發起運行的,Eclipse IDE 的Junit 插件并不識別這種用法,所有我們沒法在Eclipse的Junit窗口查看結果,只能通過Console打印出書出結果,這樣可讀性差了很多
  優化,更佳的解決方法
  第一個問題很好解決,我們只要自己寫方法來查找項目下的所有.java文件,匹配包含org.junit.Test.class注解的測試類可以了,那第二個問題呢?
  仔細思考我們的需求,我們會發現,我們并不想改變JUnit的Case執行能力,我們期望的只是希望JUnit能夠只運行我們希望讓它跑的Case. 而JUnit的Categories實現的是這種功能。Categories繼承自Suite類,我們看他的構造函數:
  public Categories(Class<?> klass, RunnerBuilder builder)
  throws InitializationError {
  super(klass, builder);
  try {
  filter(new CategoryFilter(getIncludedCategory(klass),
  getExcludedCategory(klass)));
  } catch (NoTestsRemainException e) {
  throw new InitializationError(e);
  }
  assertNoCategorizedDescendentsOfUncategorizeableParents(getDescription());
  }
  實際上是把自定義的CategoryFilter傳遞給ParentRunner的filter方法,跟上面的方式,異曲同工。
  Categories不識別我們的注解,那么我們是不是可以仿照它,做自己的Categories類呢?如下:
  1。 首先定義使用自定義Categories的參數:
  @Retention(RetentionPolicy.RUNTIME)
  public @interface IncludeSprint
  {
  String value();
  /*
  * This annotation will determine whether we want to run case without Sprint annotation or not
  * If not set, it is false by default
  */
  boolean isOnly() default false;
  }
  @Retention(RetentionPolicy.RUNTIME)
  public @interface IncludeUserStory
  {
  String value();
  }
  @Retention(RetentionPolicy.RUNTIME)
  public @interface IncludeDefect
  {
  String value();
  }
  2。然后可以在構造函數里針對它做處理:
  /**
  * Used by JUnit
  */
  public AnnotationClasspathSuite(Class<?> suiteClass, RunnerBuilder builder) throws InitializationError
  {
  super(builder, suiteClass, getTestclasses(new ClasspathClassesFinder(getClasspathProperty(suiteClass), new ClassChecker(
  getSuiteType(suiteClass))).find()));
  try
  {
  filter(new AnnotationsFilter(getIncludedSprint(suiteClass), getIncludedUserStory(suiteClass), getIncludedDefect(suiteClass),
  IsOnlyRunCaseWithSprintAnnotation(suiteClass)));
  }
  catch(NoTestsRemainException e)
  {
  throw new InitializationError(e);
  }
  assertNoCategorizedDescendentsOfUncategorizeableParents(getDescription());
  }
  這樣做出的自定義Suite Runner在使用上非常方便了,比如:
  @RunWith(AnnotationClasspathSuite.class)
  @IncludeSprint(value = "15.3", isOnly = true)
  public class TestRunner
  {
  }
  這樣可以明確的表明,我們只想跑Spring15.3的Case。并且結果也能在Eclipse IDE里完美展示:
  總結
  通過上面的實現,我們能更細粒度的規劃我們的case,也能按需靈活的運行自動化測試用例。

上一頁123下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 免费在线观看黄色网址 | 性福利影院 | 国产视频欧美 | 亚洲欧美日韩综合二区三区 | 激情五月情 | 精品久久久久久国产91 | 欧美一区二区视频在线观看 | 免费看片网址 | 欧美日韩成人高清在线播放 | 本日三级 | 亚洲国产日韩欧美综合久久 | 特级淫片aaaa毛片aa视频 | 人人做天天爱夜夜爽中字 | a4yy私人影院免费毛片 | 情人边吃奶边做好爽嗷嗷叫 | 免费看黄色网址 | 欧美日韩国产欧美 | 欧美一级xxxx俄罗斯一级 | 成人看免费一级毛片 | 欧美高清在线视频一区二区 | 91蝌蚪国产 | 草草视频免费观看 | 一级视频黄色 | 国产无内制服肉丝精品视频 | 2015xxx小明永久免费 | 成年人黄色小视频 | 国产一二三区在线观看 | 免费乱人伦 | 波多在线视频 | 亚洲国产欧美无圣光一区 | 日韩中文精品亚洲第三区 | 看黄a大片 免费 | 99资源在线| 欧美人人爽 | 亚洲综合日韩精品欧美综合区 | 在线久草视频 | 欧美人体一区二区三区 | 中国精品久久 | 欧美狠狠插 | 天堂在线资源网 | 1717she精品国产真正免费 |