成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

探索JUnit4擴展:擴展Runner

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

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

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

1. 定義Annotation

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

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

2. 擴展Runner

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

  1. public class LoggedRunner extends BlockJUnit4ClassRunner {  
  2.  
  3. private static final DateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss_SSS");  
  4.  
  5. public LoggedRunner(Class<?> klass) throws InitializationError {  
  6. super(klass);  
  7. }  
  8.  
  9. @Override 
  10. protected Statement methodBlock(FrameworkMethod method) {  
  11. Method classMethod = method.getMethod();  
  12. TestLogger loggerAnnotation = classMethod.getAnnotation(TestLogger.class);  
  13. if (loggerAnnotation != null) {  
  14. StringBuilder log = new StringBuilder(format.format(new Date()));  
  15. log.append(" ").append(classMethod.getDeclaringClass().getName())  
  16. .append("#").append(classMethod.getName()).append(": ")  
  17. .append(loggerAnnotation.log());  
  18. System.out.println(log.toString());  
  19. }  
  20. return super.methodBlock(method);  
  21. }  

3. 應(yīng)用程序

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

  1. public class Calculator {  
  2. public int divide(int a, int b) {  
  3. return a / b;  
  4. }  

4. 單元測試程序

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

  1. @RunWith(LoggedRunner.class)  
  2. public class CalculatorTest {  
  3.  
  4. private static Calculator calculator = null;  
  5.  
  6. @BeforeClass 
  7. public static void createCalculator() {  
  8. calculator = new Calculator();  
  9. }  
  10.  
  11. @Test 
  12. @TestLogger(log = "a simple division.")  
  13. public void simpleDivide() {  
  14. int value = calculator.divide(82);  
  15. Assert.assertTrue(value == 4);  
  16. }  
  17.  
  18. @Test(expected = ArithmeticException.class)  
  19. @TestLogger(log = "divided by zero, and an ArithmeticException thrown.")  
  20. public void dividedByZero() {  
  21. calculator.divide(80);  
  22. }  

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

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

原文鏈接:http://www.blogjava.net/jiangshachina/archive/2011/12/14/366289.html

【編輯推薦】

  1. 探索JUnit4擴展:使用Rule
  2. Java進(jìn)行HTML數(shù)據(jù)采集:淺談強大的group正則
  3. 多態(tài)在 Java 和 C++ 編程語言中的實現(xiàn)比較
  4. 利用JavaMail API 解析MIME
  5. 詳細(xì)解析Java中抽象類和接口的區(qū)別
責(zé)任編輯:林師授 來源: Sha Jiangd的博客
相關(guān)推薦

2011-12-26 10:38:28

JavaJUnitRule

2011-12-01 14:40:18

JUnitJava

2012-02-07 09:08:50

Feed4JUnitJava

2024-06-07 09:19:00

AIjson字符串

2009-06-08 19:59:09

EclipseJUnit單元測試

2009-06-08 19:57:29

EclipseJUnit4單元測試

2009-06-08 20:04:06

EclipseJUnit4單元測試

2016-09-23 10:20:22

JUnit擴展模型Extension

2011-08-05 09:09:59

英特爾云計算

2024-07-01 12:13:44

2023-01-06 08:06:52

Groovy類型擴展

2024-05-06 11:30:06

2009-08-27 18:04:01

c#擴展方法string

2023-01-05 08:09:27

GroovyDSL?

2021-04-21 08:56:46

Java注解反射

2009-12-01 10:08:23

WF4屬性

2018-05-31 14:40:33

2015-06-05 09:50:53

LTE

2009-03-16 09:16:13

行為擴展WCF.NET

2010-06-30 17:15:39

向外擴展SQL Ser
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品视频一区二区三区 | 欧美日韩成人在线 | 天堂网中文字幕在线观看 | 美日韩精品 | 免费视频一区二区 | 天天干精品 | 在线高清免费观看视频 | 久久久久久久一区二区三区 | 久久久人成影片一区二区三区 | 九九九视频 | 亚洲在线 | 日韩精品久久久久久 | 久久久国产一区二区三区四区小说 | 亚洲一区二区三区四区五区中文 | 欧美1区 | 国产91久久精品一区二区 | 亚洲第一网站 | 久草视频观看 | 精品欧美在线观看 | 一区二区欧美在线 | 欧美日韩国产在线 | 综合久久av | 日韩精品一区二区三区中文在线 | 亚洲欧美日韩精品久久亚洲区 | 日韩一级免费电影 | 亚洲免费在线观看 | 精品日韩| 日韩中文字幕 | 国产精品大片在线观看 | 久久综合久色欧美综合狠狠 | 精品国产乱码久久久久久闺蜜 | 黄色在线免费观看视频 | 精品一二区 | 荷兰欧美一级毛片 | 一级片在线观看 | 中文字幕av在线 | 成人高清在线 | 欧美一区二区三区四区视频 | 麻豆视频国产在线观看 | 久久精品aaa | 丁香六月伊人 |