3

こんにちは、2 つのテスト ケースを持つクラス ファイルを持つ単純なtestNGプロジェクトがあり、それに MyListener というリスナーを追加しました。SampleTest.javaこのために、TestNG の TestListenerMyListener.javaを拡張するクラス ファイルがあり、テスト ケースの実行に応じて、合格または不合格またはスキップを出力しています。したがって、SampleTest を実行するたびに、コンソールに合格/不合格が表示されます。

私の問題は、MyListener クラスでテスト ケース ファイル名 (つまり、ここでは Sampletest) を取得するにはどうすればよいですか? ということです。私はスタックトレースを試しましたが、助けはありません..私が推測するように、それは呼び出されていませんが、ファイル内のテストケースに基づいて/聞いているだけです..リスナーでそのクラスの名前を取得する方法を教えてください????

SampleTest.java:

package com.abc;

import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners({ com.mindtree.MyListener.class})
public class SampleTest {

    @Test
    public void SampleTest() throws Exception{
        System.out.println("Hello world");
    }
    @Test
    public void SampleTest1() throws Exception{
        System.out.println("Hello Swarna");
    }
}

MyListener.java:

package com.abc;

import org.testng.ITestResult;
import org.testng.TestListenerAdapter;

public class MyListener extends TestListenerAdapter  {

    private int m_count = 0;

      @Override
      public void onTestFailure(ITestResult tr) {
        log("Fail");
      }

      @Override
      public void onTestSkipped(ITestResult tr) {
        log("Skipped");
      }

      @Override
      public void onTestSuccess(ITestResult tr) {
        log("\nSuccess\n");
      ## WANT TO PRINT HERE THE TESTCASE CLASS NAME
      }

      private void log(String string) {
        System.out.print(string);
        if (++m_count % 40 == 0) {
          System.out.println("");
        }
      }

}

ただし、複数のテストケース ファイルでは機能しません。MyListener で SampleTest のオブジェクトを作成するだけで、getter と setter を介してクラス名にアクセスできます。

4

5 に答える 5

2

あなたの説明から、 @Test 注釈付きのテストメソッドが存在するクラスの名前と、パッケージ名のないクラス名のみを取得したいことを理解しています

あなたの場合、それは出力になります:「SampleTest」。

これは次の方法で実現できます。

public void onTestSuccess(ITestResult tr) {
        log("\nSuccess\n");
        String className = tr.getTestClass().getRealClass().getSimpleName()      
        log(className);
}

@JacekM のソリューションも正常に機能しますが、あなたの場合は「com.abc.SampleTest」を返します

于 2015-07-03T12:03:35.510 に答える
0

メソッドの名前を取得できる beforeMethod メソッドを使用する

@BeforeMethod
public void beforeMethod(final Method method) throws Exception {
String testName = method.getName();
}
于 2013-09-04T10:18:02.327 に答える
0

ITestResult オブジェクトにアクセスできるので、次のことができるはずです。

public void onTestSuccess(ITestResult tr) {
   String className = tr.getMethod().getTestClass().getName();
   System.out.println(className);
}
于 2013-09-04T14:29:58.510 に答える
0

次のようなスタックトレースを調べることで確認できます。

StackTraceElement trace[] = Thread.currentThread().getStackTrace(); 呼び出し元のクラスは trace[i].getClassName() で取得できます。

これはかなり高価なので、ロガーなどでは使用しないでください。

于 2013-09-04T10:12:41.680 に答える