使用TestNG,是否可以动态更改测试名称?

时间:2012-08-27 18:25:45

标签: junit testng

使用TestNG,是否可以使用下面的方法动态更改测试名称?

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

2 个答案:

答案 0 :(得分:2)

不,但您的测试类可以实现org.testng.ITest并覆盖getTestName()以返回测试的名称。

答案 1 :(得分:0)

对于仍面临此问题的任何人。
可以通过实现org.testng.ITest类并重写getTestName()方法来完成此操作,就像@Cedric提到的那样。
要使测试名称动态化,还可以使用本地创建的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