有没有办法将方法中的userdefined参数注入到AbstractBase类的before方法之前

时间:2017-07-19 21:45:29

标签: java selenium testng

在方法I中,从excel获取我的测试用例名称,即使用数据提供者传递给方法。我想在@beforemethod中传递该Testcase名称(在不同的类中定义,即AbstractBaseclass,Method类正在扩展此AbstractBaseClass),我已经启动了扩展区报告。我想通过testcasename开始我的报告。

有没有办法将testcase名称作为参数从方法传递给@beforemethod

1 个答案:

答案 0 :(得分:3)

这是你如何做到的。 TestNG允许您将Object[]数组注入@BeforeMethod带注释的方法。当TestNG看到一个对象数组时,它本身会注入即将传递给数据驱动的@Test方法的参数。请参阅this TestNG wiki页面,详细了解TestNG作为本机注入的一部分所允许的内容。

以下是基类的外观:

import org.testng.annotations.BeforeMethod;

public class AbstractBaseClass {
    @BeforeMethod
    public void beforeMethod(Object[] parameters) {
        //Here we are assuming that the testname will always be the first parameter
        //in the 1D array that gets sent for every iteration of @Test method
        if (parameters != null && parameters.length >= 1) {
            String testname = parameters[0].toString();
            System.out.println("Test name obtained in beforeMethod() " + testname);
        }
    }
}

以下是您的测试类的外观

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestClass extends AbstractBaseClass {
    @Test(dataProvider = "getData")
    public void testMethod(String testname, int count) {
        Assert.assertNotNull(testname);
        Assert.assertTrue(count > 0);
    }

    @DataProvider
    public Object[][] getData() {
        return new Object[][]{
                {"LoginTestCase", 100},
                {"ComposeMailTestcase", 200}
        };
    }
}

通过这种方式,您可以在基类本身中获取测试名称,即使它是通过数据提供程序提供的。

一如既往,请确保您使用 TestNG 6.11 (截至2017年7月20日是TestNG的最新发布版本)