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

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
JUNIT源碼探秘系列(下)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/4/16 14:34:04 ] 推薦標(biāo)簽:

接著我們看下Junit中觀察者的實(shí)現(xiàn)類是如何實(shí)現(xiàn)接口類,在swt、swing的UI方式和控制臺(tái)方式這三種運(yùn)行模式中都對其觀察者接口的具體實(shí)現(xiàn)。在這以testui運(yùn)行模式調(diào)用為例。在testui模式中,TestRunner繼承BaseTestRunner而這段代碼在BaseTestRunner實(shí)現(xiàn)如下:

public synchronized void endTest(Test test) {

      testEnded(test.toString());

   }

   public synchronized void addError(final Test test, final Throwable t) {

      testFailed(TestRunListener.STATUS_ERROR, test, t);

   }

   public synchronized void addFailure(final Test test, final AssertionFailedError t) {

      testFailed(TestRunListener.STATUS_FAILURE, test, t);

}

另外在testui中的ResultPrinter也實(shí)現(xiàn)了對TestListener的實(shí)現(xiàn),具體如下:

    public void addError(Test test, Throwable t) {

     getWriter().print("E");

  }

  public void addFailure(Test test, AssertionFailedError t) {

     getWriter().print("F");

  }

  public void endTest(Test test) {

  }

  public void startTest(Test test) {

     getWriter().print(".");

     if (fColumn++ >= 40) {

        getWriter().println();

        fColumn= 0;

     }

}

Junit中的說被觀察者是TestResult對象,它有添加觀察者的方法:

  public synchronized voidaddListener(TestListener listener) {

     fListeners.addElement(listener);

  }

在Junit中被觀察者是如何通知觀察者呢?請看這幾個(gè)方法,在TestResult中下面幾個(gè)方法都是循環(huán)遍歷觀察者列表,并調(diào)用相應(yīng)的更新方法:

  public synchronized void addError(Test test, Throwable t) {

     fErrors.addElement(new TestFailure(test, t));

     for (Enumeration e= cloneListeners().elements(); e.hasMoreElements(); ) {

        ((TestListener)e.nextElement()).addError(test, t);

     }

  }

  public synchronized void addFailure(Test test, AssertionFailedError t) {

     fFailures.addElement(new TestFailure(test, t));

     for (Enumeration e= cloneListeners().elements(); e.hasMoreElements(); ) {

        ((TestListener)e.nextElement()).addFailure(test, t);

     }

  }

  public synchronized voidaddListener(TestListener listener) {

     fListeners.addElement(listener);

  }

  public synchronized voidremoveListener(TestListener listener) {

     fListeners.removeElement(listener);

  }

  private synchronized Vector cloneListeners() {

     return (Vector)fListeners.clone();

  }

在Junit中使用觀察者模式帶來的好處:

1)上面提到的Subject與Observer的抽象耦合,使JUnit可以支持不同的使用方式,為Junit執(zhí)行平臺(tái)(如textui、awtextui等)的擴(kuò)展非常容易

2)支持了廣播通信,目標(biāo)對象不關(guān)心有多少對象對自己注冊,它只是通知注冊的觀察者

上一頁1234567下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 国产成人夜间影院在线观看 | 日韩高清的天堂在线观看免费 | 大陆一级黄色片 | 国产高清网站 | 免费一看一级毛片全播放 | 日韩欧美在线观看成人 | 欧美乱一级在线观看 | 手机看片日韩国产一区二区 | 欧美精品一二三区 | 一区二区国产在线播放 | 涩涩漫画在线看 | 三级在线免费 | 91精品观看91久久久久久 | 日本羞羞无遮挡免费漫画 | 免播放器在线视频 | a在线免费观看视频 | 久久国产高清视频 | 亚洲欧洲日本精品 | 亚洲91在线视频 | 看片久久 | 丁香五月缴情综合网 | 国产高清在线精品二区一 | 亚洲国产高清在线精品一区 | 欧美成人激情 | 久久久亚洲欧洲日产国码二区 | 久操手机在线视频 | 天天干天 | 日韩视频免费在线 | 中文在线免费视频 | 欧美人成在线视频 | 亚洲欧美日本一区 | 亚洲欧美日韩精品在线 | 国产男女视频在线观看 | 精品视频一区二区三区在线播放 | 久久窝窝国产精品午夜看15 | 欧美视频三区 | 窝窝社区在线观看www | 欧美日韩高清不卡一区二区三区 | 国产亚洲欧美一区二区 | 精品伊人久久大线蕉色首页 | 狠狠躁夜夜躁人人躁婷婷视频 |