2013-10-08 68 views
0

最近我試圖構建像TestNG這樣的框架,但在Launcher事件(我不知道它是啓動器問題還是其他猜測)。所以這就是我所做的。需要幫助對於構建測試框架

  1. 首先,我創建
  2. 名爲Test自定義註釋
  3. 寫一個實現類測試註釋與主要方法(現在我只針對一個註解)在實現類我寫代碼的主要方法閱讀XML(所以我可以得到類名稱和使用反射我正在檢查類的方法與測試註釋和調用它)。
  4. 現在我用帶有測試註釋的方法編寫了另一個類,並在xml文件中提到了類名。現在當我們使用testng時,我們可以選擇運行該方法/類作爲TestNG
  5. 但在我的情況下,我不知道如何運行我的類,因爲沒有主要的方法。
  6. 所以我在這一點上受到攻擊。請提出我應該做的事。如果我們需要啓動器,那麼請告訴我們如何創建啓動器或任何包含啓動器信息的tutuorial/Book/weblink。

*注:我知道如果我們使用註釋,我們不需要XML文件。但爲了簡化,我從XML中獲取類名,稍後我將丟棄XML。

在此先感謝。

這是我的測試Annoatation

package com.annoatation;

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Target(value=ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Test { 

} 

這是我的課堂,我使用Annaotation:

package com.annoatation; 

public class TestExample{ 
    @Test 
    public void sampleMethod() 
    { 
     System.out.println("This is sample method"); 
    } 
    @Test 
    public void sampleMethod1() 
    { 
      System.out.println("This is sample method 1"); 
    } 

} 

這是我的主類:

package com.annoatation; 

import java.lang.reflect.InvocationTargetException; 
import java.lang.reflect.Method; 

public class Main { 
    public static void main(String[] args) { 
     TestExample example=new TestExample(); 
     Method[] method=example.getClass().getMethods(); 
     for(Method methods:method) 
     { 
      Test test=methods.getAnnotation(com.annoatation.Test.class); 
      if(test!=null) 
      { 
       try { 
        methods.invoke(example); 
       } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (InvocationTargetException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 

    } 

} 

我希望當我點擊運行作爲我的TestExample級IT應該自動調用main類的main方法。 我不知道是什麼,我們說這件事情在java中(可能是入口點)

回答

0

使用反射來創建類的實例,並調用註解的方法:

Class classDefinition = Class.forName(className); 
object = classDefinition.newInstance(); 

Method method = classDefinition.getMethod("methodName"); 
method.invoke(object);