0

最近、私は TestNG のようなフレームワークを構築しようとしていましたが、Launcher の問題にぶつかりました (Launcher の問題なのか、他の何かが推測しているのかわかりません)。これが私がしたことです。

  1. まず、Test という名前のカスタム アノテーションを作成しました
  2. main メソッドを使用してテスト アノテーションの実装クラスを作成しました (現在、1 つのアノテーションのみをターゲットにしています)。
  3. 実装クラスのメインメソッドで、xmlを読み取るコードを作成しました(クラス名を取得し、リフレクションを使用して、テストアノテーションでクラスのメソッドをチェックし、呼び出しています)。
  4. ここで、テスト アノテーションを持つメソッドを使用して別のクラスを作成し、xml ファイルにクラス名を記述しました。これを使用するtestngと、そのメソッド/クラスをTestNGとして実行するオプションが得られます。
  5. しかし、私の場合、メインメソッドがないため、クラスを実行する方法がわかりません。
  6. だから私はこの時点で打たれています。私が何をすべきか提案してください。ランチャーが必要な場合は、ランチャーまたはランチャーに関する情報を含むチュートリアル/書籍/ウェブリンクの作成方法を教えてください。

*注: 注釈を使用する場合、XML ファイルは必要ありません。しかし、単純化するために、後で XML からクラス名を取得するので、XML を破棄します。

前もって感謝します 。

これは私のテスト注釈です

パッケージcom.annoation;

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 {

}

これは私が注釈を使用している私のクラスです:

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クラスでRun asをクリックすると、メインクラスのメインメソッドが自動的に呼び出されます。Java でこのことを何と言っているかわかりません (エントリ ポイントの可能性があります)。

4

1 に答える 1

0

リフレクションを使用してクラスのインスタンスを作成し、注釈付きメソッドを呼び出します。

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

Method method = classDefinition.getMethod("methodName");
method.invoke(object);
于 2013-10-08T15:00:50.337 に答える