自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

前面我寫了關(guān)于Java注解和反射的文章:

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

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

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

實例需求

需求:模擬Junit4中的用例結(jié)構(gòu),自定義一個標簽作為測試用例的標識。

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

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

 具體要求:

測試類是默認構(gòu)造方法

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

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

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

注解設(shè)計

首先需要定義一個注解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(); 

 測試用例設(shè)計

模擬junit4框架,寫一個測試類,其中l(wèi)ogin、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");  

 運行類的設(shè)計思路

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

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

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

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

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

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

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

  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); //調(diào)用方法  
  8.               System.out.println("測試用例名稱是:"+method.getName()); 

 運行代碼,輸出如下:

  1. logout 

測試用例名稱是:logout

  1. login 

測試用例名稱是:login

  1. info 

測試用例名稱是:info

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

 

責任編輯:姜華 來源: 今日頭條
相關(guān)推薦

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單元測試

2009-06-08 20:04:06

EclipseJUnit4單元測試

2024-06-07 09:19:00

AIjson字符串

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

區(qū)塊鏈

2014-04-24 09:49:57

Android測試異步任務

2014-03-13 11:25:43

C++OpenCV

2021-12-30 12:30:01

Java注解編譯器

2025-03-31 00:00:00

MCPAPI服務器通信

2020-06-19 09:15:11

Python內(nèi)置方法屬性應用

2021-05-11 08:30:54

前端css技術(shù)熱點

2013-05-30 15:02:33

dom4j反射

2020-10-29 10:16:30

AIML網(wǎng)絡安全

2022-06-27 10:56:33

ARIoT物聯(lián)網(wǎng)

2009-07-01 14:05:23

JavaScript異
點贊
收藏

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