5

TestNGを使用して、以下のような方法でテスト名を動的に変更することは可能ですか?

@Test(testName = "defaultName", dataProvider="tests")
public void testLogin( int num, String reportName )
{
    System.out.println("Starting " + num + ": " + reportName);
    changeTestName("Test" + num);
}
4

2 に答える 2

4

いいえ。ただし、テストクラスはorg.testng.ITestgetTestName()を実装およびオーバーライドして、テストの名前を返すことができます。

于 2012-08-27T19:50:02.970 に答える
2

まだこれに直面している人のために。
これはorg.testng.ITest、@ Cedricが言及しているように、クラスを実装し、getTestName()メソッドをオーバーライドすることで実行できます。
テスト名を動的にするには、ローカルで作成されたtestName変数を使用できます。
以下はあなたがする必要があるすべてです

import java.lang.reflect.Method;
import org.testng.ITest;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;

public class MyTestClass implements ITest {

    @Test(dataProvider = "/* yourDataProvider */")
    public void myTestMethod() {
        //Test method body
    }

    @BeforeMethod(alwaysRun = true)
    public void setTestName(Method method, Object[] row) {
        //You have the test data received through dataProvider delivered here in row
        String name = resolveTestName(row);
        testName.set(name);
    }

    @Override
    public String getTestName() {
        return testName.get();
    }
    private ThreadLocal<String> testName = new ThreadLocal<>();
}

このようにして、testNameを動的に生成できるはずです。

于 2019-07-17T09:20:48.763 に答える