2

@DataProviderを使用してデータを取得しようとしています。これはObject[][]、別のメソッドを呼び出して値を貼り付けているを返します。このメソッドは、@Parametersを使用して XML から値を取得します。

問題は、@DataProviderが value を渡して@Parametersで必要なメソッドを呼び出しているNullPointerExceptionため、 @ 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);
    }
}

ここでは、@Parameters({"extensionsArray"})XML ファイルから値を提供しません。nullメソッドを呼び出すための引数として渡された を受け取るだけgenerateRandomFileNameWithExtension()です。同時に、呼び出されたメソッドに引数を渡さずに@DataProviderからこのメソッドを呼び出すことはできません。

あなたの提案を願っています。

4

1 に答える 1

1

解決策を見つけました。XML から@DataProviderITestContext contextにパラメータを渡す最良の方法は、引数として@DataProviderメソッドに渡し、次を使用して必要なパラメータを取得することです。

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)}};
    }

ご提案いただきありがとうございます。

于 2015-10-09T14:18:49.757 に答える