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

干貨!使用Java注解和反射實現Junit4中的用例調用(附源碼)

開發 后端
大家可能會問,這些高級的知識點在實際工作中有哪些應用呢?在這里我們來結合java注解和反射的知識做一個實際案例的編寫,讓大家對其有更深刻的理解!直接上實例!

前面我寫了關于Java注解和反射的文章:

測試開發必須掌握的重要知識點-Spring的核心知識點 -Java注解@

測試開發必須掌握的知識點:Java反射

大家可能會問,這些高級的知識點在實際工作中有哪些應用呢?在這里我們來結合java注解和反射的知識做一個實際案例的編寫,讓大家對其有更深刻的理解!直接上實例!

實例需求

需求:模擬Junit4中的用例結構,自定義一個標簽作為測試用例的標識。

在Junit4中注解@Test表示測試用例,每一個測試用例的本質就是測試類中的一個方法,即:

  1. @Test 
  2. public void test() { 
  3. fail("Not yet implemented"); 

 具體要求:

測試類是默認構造方法

通過標簽MyTag作為方法是否為用例的標識

作為用例的方法必須是無參的

寫一個方法runCase(String pkgName),使其能夠完成對指定類中測試用例的調用工作

注解設計

首先需要定義一個注解MyTag,代碼如下:

  1. import java.lang.annotation.Retention; 
  2. import java.lang.annotation.Target; 
  3. import java.lang.annotation.ElementType; 
  4. import java.lang.annotation.RetentionPolicy; 
  5. @Retention(RetentionPolicy.RUNTIME) 
  6. @Target(ElementType.METHOD) 
  7. public @interface MyTag{ 
  8. String name(); 

 測試用例設計

模擬junit4框架,寫一個測試類,其中login、info、logout是無參方法,而test是有參方法

  1. public class TestTag{ 
  2. @MyTag(name="case1"
  3. public void login(){ 
  4. System.out.println("login"); 
  5. @MyTag(name="case2"
  6. public void info(){ 
  7. System.out.println("info");  
  8. @MyTag(name="case3"
  9. public void logout(){ 
  10. System.out.println("logout"); 
  11. @MyTag(name="case4"
  12. public void test(String p){ 
  13. System.out.println("logout");  

 運行類的設計思路

因為測試類是默認構造方法,所以使用如下API,完成類實例化

  1. Class<?> clazz = Class.forName(pkgName) 
  2. Object obj = clazz.newInstance(); 

 因為測試類中有很多方法,我們需要獲取所有的方法并按照規則進行過濾,代碼如下:

  1. Method[] methods = clazz.getMethods(); 
  2. for (Method method : methods) { 
  3. //過濾規則  

 判斷方法的標簽是否為MyTag,代碼如下:

  1. If(method.getAnnotation(MyTag.class) != null) 

判斷方法是否沒有參數,代碼如下:

  1. If(method.getParameterCount()==0) 

運行方法,代碼如下:

  1. method.invoke(obj) 

完整代碼

  1. public static void runCase(String pkgName) throws IllegalAccessException,IllegalArgumentException, InvocationTargetException, InstantiationException,ClassNotFoundException {  
  2. Class<?> clazz = Class.forName(pkgName);  
  3. Object obj = clazz.newInstance();  
  4. Method[] methods = clazz.getMethods(); 
  5. for (Method method : methods) { 
  6.        if(method.getAnnotation(MyTag.class) != null&& method.getParameterCount()==0) {                   
  7.               method.invoke(obj); //調用方法  
  8.               System.out.println("測試用例名稱是:"+method.getName()); 

 運行代碼,輸出如下:

  1. logout 

測試用例名稱是:logout

  1. login 

測試用例名稱是:login

  1. info 

測試用例名稱是:info

這個就是一個模擬Junit4執行用例的demo,當我們隨意添加TestTag 中的測試用例時,執行runCase方法,都能夠成功執行測試用例。相信通過這個例子大家一定會注解,和反射的概念有了更為深刻的理解!我們的實例目前只支持對于指定某一個類中的測試方法進行調用,大家可以考慮如何實現對于某一個包下所有類的測試用例都可以進行調用呢?

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2011-12-26 10:38:28

JavaJUnitRule

2011-12-26 10:49:27

JavaJUnitRunner

2009-06-08 19:59:09

EclipseJUnit單元測試

2009-06-08 19:57:29

EclipseJUnit4單元測試

2024-06-07 09:19:00

AIjson字符串

2009-06-08 20:04:06

EclipseJUnit4單元測試

2012-02-09 10:42:24

Java

2021-01-07 14:06:30

Spring BootJUnit5Java

2024-01-18 09:38:00

Java注解JDK5

2020-11-20 09:53:08

區塊鏈

2014-04-24 09:49:57

Android測試異步任務

2021-12-30 12:30:01

Java注解編譯器

2014-03-13 11:25:43

C++OpenCV

2025-03-31 00:00:00

MCPAPI服務器通信

2022-06-27 10:56:33

ARIoT物聯網

2020-06-19 09:15:11

Python內置方法屬性應用

2020-10-29 10:16:30

AIML網絡安全

2013-05-30 15:02:33

dom4j反射

2021-05-11 08:30:54

前端css技術熱點

2019-12-06 20:54:29

物聯網物聯網應用IOT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.成人.com | 日韩中文字幕在线视频 | 伊人天堂网| 天天插天天操 | a级毛片毛片免费观看久潮喷 | 欧美一区二区三区在线看 | 国产精品福利在线观看 | 欧美黄色精品 | 日韩欧美专区 | 国产精品久久精品 | 国产一区二区在线免费观看 | 九色视频网站 | 日本成人三级电影 | 老子午夜影院 | 日韩视频在线观看中文字幕 | 欧美一级大片 | 龙珠z国语版在线观看 | 国产在线观看av | 日韩成人av在线播放 | 日韩精品a在线观看图片 | 午夜码电影 | 国产成人免费视频网站视频社区 | 国产精品久久久久久中文字 | 99re| 日本a∨视频 | 欧美成视频在线观看 | 国产成人综合在线 | 中文字幕一区二区三区日韩精品 | 成人av网站在线观看 | 天天曰天天曰 | 精品久久久久久久久久久 | 国产精品毛片无码 | 婷婷久久综合 | 久久久久久久久久久久亚洲 | 精品国产乱码久久久久久中文 | 亚洲免费成人 | 国产精品一区二区三级 | 99精品免费在线观看 | 日韩在线成人 | 欧美日韩久久精品 | 中文字幕日本一区二区 |