java TestNG使用@DataProvider中的@Parameters调用方法

时间:2015-10-09 11:12:59

标签: java parameters nullpointerexception testng testng-dataprovider

我尝试使用 @DataProvider 获取数据,该数据返回Object[][],其中我通过调用另一种方法来粘贴值。这种方法反过来使用 @Parameters 从XML获取值。

问题在于我获得了NullPointerException,因为在 @DataProvider 中通过传递值{{1}来调用 @Parameters 所需的方法希望 @Parameters 将此值从XML更改为适当的值。 同时,我不能通过不传递任何参数来调用方法。

代码:

班级null

TestSuite

班级package blablabla.mainPackage; import blablabla.framework.*; import java.io.IOException; import java.util.ArrayList; import org.testng.annotations.Test; public class TestSuite extends Config { FilesOperations fOps = new FilesOperations(); List<String> fileNames = new ArrayList<String>(); @Test(groups = {"positive"}, dataProvider = "getRandomFileName", priority = 1) public void createFileRandom(String fileName) throws IOException { fOps.createFile(fileName, tempPath); fileNames.add(fileName); } }

Config

班级package blablabla.mainPackage; import blablabla.framework.*; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Parameters; public class Config extends DataProviders{ public static Path tempPath; DirectoriesOperations dirOps = new DirectoriesOperations(); @BeforeSuite(alwaysRun = true) @Parameters({"path"}) public void tearUp(String path) throws IOException { tempPath = dirOps.createTempDir(Paths.get(path)); } @AfterSuite(alwaysRun = true, enabled = true) public void tearDown() throws IOException { dirOps.deleteTempDirOnExit(tempPath); } }

DataProviders

班级package blablabla.framework; import java.io.IOException; import org.testng.annotations.DataProvider; public class DataProviders { FilesOperations fOps = new FilesOperations(); HelpFunctions hf = new HelpFunctions(); ParametrizedFunctions pf = new ParametrizedFunctions(); @DataProvider(name = "getRandomFileName") public Object[][] getRandomFileName() { return new Object[][]{new Object[]{pf.generateRandomFileNameWithExtension(null)}}; } }

ParametrizedFunctions

此处,package blablabla.framework; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.testng.annotations.Parameters; public class ParametrizedFunctions { FilesOperations fOps = new FilesOperations(); HelpFunctions hf = new HelpFunctions(); @Parameters({"extensionsArray"}) public String generateRandomFileNameWithExtension(String extensionsArray) { return fOps.getFileName(hf.stringToArray(extensionsArray), null); } } 未提供XML文件中的值。它只需要@Parameters({"extensionsArray"}),它作为调用方法null的参数传递。而且,与此同时,我不能从 @DataProvider 调用此方法,而不将任何参数传递给被调用的方法。

希望你的建议。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。将参数从XML传递到 @DataProvider 的最佳方法是将ITestContext context作为参数传递给 @DataProvider 方法,然后使用以下方法获取所需参数:< / p>

context.getCurrentXmlTest().getParameter("parameterName");

@DataProvider 的完整代码:

@DataProvider(name = "getRandomFileName")
    public Object[][] getRandomFileName(ITestContext context) {
        String extensionsArray = context.getCurrentXmlTest().getParameter("extensionsArray");
        return new Object[][]{new Object[]{pf.generateRandomFileNameWithExtension(extensionsArray)}};
    }

感谢大家的建议。