覆盖TestNG的getTestName方法

时间:2014-03-14 12:25:00

标签: interface override testng

我使用dataProvider执行TestNG测试。 所以我通过@BeforeMethod设置了testName,并重写了getTestName()。

到目前为止,这可行,但似乎TestNG在开始时调用了测试的getTestName 在它开始之前。在配置期间抛出异常时会发生这种情况,因此@BeforeMethod不会被执行,因此我的测试名称为null。

无论如何都要调用原始方法,如果我没有覆盖它就会被调用:D因为我实现了一个接口,所以不要从另一个类扩展我不能使用super.getTestName()。 / p>

任何解决这个问题的方法都可能是?

@Test(groups = {TestGroups.READY}, description = "check help on each tab")
public class HelpTest extends TestControl implements ITest {

    // overriding to return my individual testname, but is null at the beginning
    @Override
    public String getTestName() {
        return TestControl.getCurrentTestName();
    }

    @DataProvider(name = "tabs")
    public Iterator<Object[]> tabs() {
        Set<Object[]> list = new LinkedHashSet<Object[]>();
        for (Tab tab : Tab.values()) {
            list.add(new Object[]{tab});
        }
        return list.iterator();
    }

    // before the test below starts, i set my individual testname
    @BeforeMethod
    public void setTestName(Method method, Object[] testData) {
        TestControl.setCurrentTestName(method.getName() + "_" + StringUtils.capitalize(testData[0].toString().toLowerCase()));
    }

    // executing the test with the given data provider
    @Test(dataProvider = "tabs")
    public void testHelpSites(Tab tab) throws Exception {
        TestActions.goTab(tab).callHelp(tab).checkHelp();
    }
}

2 个答案:

答案 0 :(得分:0)

我想我弄清楚了,我还通过AbstractWebDriverEventListenerITestListener使用了TestReporter,并在其onTestStart(ITestResult result)上调用了测试的名称,这是{之前调用的来源} {1}}致电。

我通过检查@BeforeMethod是否为null来解决它,如果它实现result.getName()则调用测试getTestName(),如果它是null,我使用ITest中的原始名称。不漂亮,但很少见:D

答案 1 :(得分:0)

我可以使用ITestNGMethod testng类来解决这个问题。

ITestNGMethod method = result.getMethod(); //结果是ITestResult对象 method.getMethodName(); //这将返回方法名称。

My complete method here:
    @Override
    public void onTestSuccess(ITestResult result) {
    ITestNGMethod method = result.getMethod();
    String message = "Test Execution is Successful:"+method.getMethodName();
    }

希望这有帮助