1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢(xún)
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
      JUnit4中如何擴(kuò)展Runner

      JUnit4中如何擴(kuò)展Runner,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

      十年的瓊海網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷(xiāo)型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整瓊海建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“瓊海網(wǎng)站設(shè)計(jì)”,“瓊海網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

      在使用JUnit的過(guò)程中,大家可能會(huì)對(duì)JUnit進(jìn)行一些擴(kuò)展。本文中的示例為JUnit4定義了一個(gè)新的Annotation,并相應(yīng)地對(duì)已有的Runner進(jìn)行擴(kuò)展,使其能夠解析新引入的Annotation。

      臆造一個(gè)示例,會(huì)在執(zhí)行單元測(cè)試方法之前,自動(dòng)地為單元測(cè)試方法打印日志。該示例會(huì)為JUnit定義一個(gè)新的Annotation用于指定要打印的日志內(nèi)容,并對(duì)JUnit默認(rèn)提供的Runner實(shí)現(xiàn)BlockJUnit4ClassRunner進(jìn)行擴(kuò)展,使其能夠識(shí)別這個(gè)新的Annotation。

      1. 定義Annotation

      TestLogger是一個(gè)作用于方法的Annotation,它只有一個(gè)屬性,用于指定日志的內(nèi)容,其代碼如下所示,

      @Target({ ElementType.METHOD })  @Retention(RetentionPolicy.RUNTIME)  public @interface TestLogger {  public String log() default "";  }

      2. 擴(kuò)展Runner

      JUnit提供了若干個(gè)Runner的實(shí)現(xiàn),如BlockJUnit4ClassRunner,Suite,其中BlockJUnit4ClassRunner用來(lái)執(zhí)行單個(gè)測(cè)試用例類(lèi)。LoggedRunner將擴(kuò)展BlockJUnit4ClassRunner,覆寫(xiě)其中的methodBlock()方法。新的methodBlock()方法會(huì)在一開(kāi)始試圖獲取被執(zhí)行測(cè)試方法中的TestLogger Annotation,如果存在的話,就會(huì)打印出指定的日志,每行日志以當(dāng)時(shí)的執(zhí)行時(shí)間與完整方法名作為前綴。該類(lèi)的代碼如下所示,

      public class LoggedRunner extends BlockJUnit4ClassRunner {   private static final DateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss_SSS");   public LoggedRunner(Class klass) throws InitializationError {  super(klass);  }   @Override protected Statement methodBlock(FrameworkMethod method) {  Method classMethod = method.getMethod();  TestLogger loggerAnnotation = classMethod.getAnnotation(TestLogger.class);  if (loggerAnnotation != null) {  StringBuilder log = new StringBuilder(format.format(new Date()));  log.append(" ").append(classMethod.getDeclaringClass().getName())  .append("#").append(classMethod.getName()).append(": ")  .append(loggerAnnotation.log());  System.out.println(log.toString());  }  return super.methodBlock(method);  }  }

      3. 應(yīng)用程序

      Calculator是一個(gè)簡(jiǎn)單的應(yīng)用程序,其中定義了一個(gè)除法方法,代碼如下所示,

      public class Calculator {  public int divide(int a, int b) {  return a / b;  }  }

      4. 單元測(cè)試程序

      CalculatorTest是一個(gè)簡(jiǎn)單的單元測(cè)試程序,它會(huì)使用兩種方式對(duì)Calculator中的divide()方法進(jìn)行單元測(cè)試。其代碼如下所示,

      @RunWith(LoggedRunner.class)  public class CalculatorTest {   private static Calculator calculator = null;   @BeforeClass public static void createCalculator() {  calculator = new Calculator();  }   @Test @TestLogger(log = "a simple division.")  public void simpleDivide() {  int value = calculator.divide(8, 2);  Assert.assertTrue(value == 4);  }   @Test(expected = ArithmeticException.class)  @TestLogger(log = "divided by zero, and an ArithmeticException thrown.")  public void dividedByZero() {  calculator.divide(8, 0);  }  }

      值得注意的是,CalculatorTest特別指定LoggedRunner作為測(cè)試執(zhí)行器(@RunWith(LoggedRunner.class));同時(shí),每個(gè)單元測(cè)試方法,simpleDivide()與dividedByZero(),都使用了Annotation TestLogger,為其指定日志內(nèi)容。當(dāng)執(zhí)行上述單元測(cè)試時(shí),會(huì)自動(dòng)地打印出如下形式的日志內(nèi)容:

      2011-12-13_23:48:38_218 test.CalculatorTest#simpleDivide: a simple division
      2011-12-13_23:48:38_218 test.CalculatorTest#dividedByZero: divided by zero, and an ArithmeticException thrown.

      5. 小結(jié)

      通過(guò)對(duì)BlockJUnit4ClassRunner的擴(kuò)展,可以讓JUnit在運(yùn)行測(cè)試用例時(shí)做一些額外的工作。但這種直接修改默認(rèn)Test Runner的方式并不被提倡,在下一篇文章中將會(huì)介紹使用Test Rule來(lái)達(dá)到相同的擴(kuò)展目的。

      關(guān)于JUnit4中如何擴(kuò)展Runner問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


      網(wǎng)站標(biāo)題:JUnit4中如何擴(kuò)展Runner
      標(biāo)題來(lái)源:http://www.ef60e0e.cn/article/jecphd.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        东辽县| 荆州市| 曲水县| 阿荣旗| 塔河县| 东源县| 东明县| 永年县| 恩平市| 白沙| 武宁县| 巴塘县| 手游| 龙岩市| 东海县| 来安县| 景东| 平凉市| 祥云县| 翁源县| 都江堰市| 万山特区| 平和县| 锡林浩特市| 微山县| 成武县| 安丘市| 原平市| 上思县| 衡阳市| 衡阳县| 五大连池市| 松滋市| 沿河| 双桥区| 淮阳县| 迁安市| 大足县| 望谟县| 水城县| 登封市|