Java 在JUnit参数化测试中,如何将数组作为测试参数传递?

Java 在JUnit参数化测试中,如何将数组作为测试参数传递?,java,selenium,junit,Java,Selenium,Junit,我有一个字符串数组,对于数组中的每个字符串,我希望验证它是否显示在网页上,然后打开该链接。我不知道如何使我的测试成为参数化测试。非常感谢您的帮助,谢谢 package testCases; import junitparams.JUnitParamsRunner; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.

我有一个字符串数组,对于数组中的每个字符串,我希望验证它是否显示在网页上,然后打开该链接。我不知道如何使我的测试成为参数化测试。非常感谢您的帮助,谢谢

package testCases;

import junitparams.JUnitParamsRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.PageFactory;
import pageObjects.HomePage;

import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

/**
 * Created by blah on 12/17/2015.
 */

@RunWith(value = JUnitParamsRunner.class)
public class ******
{

    // Create Page Objects
    HomePage hp;
    WebDriver driver;

    ArrayList<String> tableData = new ArrayList<String>();



//    @Test
//    @Parameters({something})
//

//    public void test_add(String asdas) {
//        hp.checkLink(asdas);
//    }


    @Before
    public void setup()
    {
        // Configure Chrome Options
        ChromeOptions options = new ChromeOptions();
       options.addArguments("--disable-extensions");
        driver = new ChromeDriver(options);

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        // Initialize Page Objects
        hp = PageFactory.initElements(driver, HomePage.class);
    }



    // Pre Reqs
    @Test
    public void P1()
    {
        driver.get("the website I go to");
        tableData= hp.readSystemTableData();
        hp.checkLinks(tableData);
       // hp.getTitle();
        tearDown();
    }

    @After
    public void tearDown()
    {
        driver.quit();
    }
}


java.lang.IllegalArgumentException: wrong number of arguments
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at junitparams.internal.InvokeParameterisedMethod.evaluate(InvokeParameterisedMethod.java:211)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at junitparams.internal.ParameterisedTestMethodRunner.runMethodInvoker(ParameterisedTestMethodRunner.java:47)
    at junitparams.internal.ParameterisedTestMethodRunner.runTestMethod(ParameterisedTestMethodRunner.java:40)
    at junitparams.internal.ParameterisedTestClassRunner.runParameterisedTest(ParameterisedTestClassRunner.java:147)
    at junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:414)
    at junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:385)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
封装测试用例;
导入junitparams.JUnitParamsRunner;
导入org.junit.After;
导入org.junit.Before;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.chrome.ChromeDriver;
导入org.openqa.selenium.chrome.ChromeOptions;
导入org.openqa.selenium.support.PageFactory;
导入pageObjects.HomePage;
导入java.util.ArrayList;
导入java.util.concurrent.TimeUnit;
/**
*由blah于2015年12月17日创建。
*/
@RunWith(值=JUnitParamsRunner.class)
公共课******
{
//创建页面对象
主页惠普;
网络驱动程序;
ArrayList tableData=新的ArrayList();
//@测试
//@Parameters({something})
//
//公共无效测试添加(字符串asdas){
//hp.checkLink(asdas);
//    }
@以前
公共作废设置()
{
//配置Chrome选项
ChromeOptions选项=新的ChromeOptions();
options.addArguments(“--disable extensions”);
驱动程序=新的色度驱动程序(可选);
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
//初始化页面对象
hp=PageFactory.initElements(驱动程序,HomePage.class);
}
//预需求
@试验
公共图书馆P1(
{
获取(“我去的网站”);
tableData=hp.readSystemTableData();
hp.checkLinks(tableData);
//hp.getTitle();
撕裂();
}
@之后
公共无效拆卸()
{
driver.quit();
}
}
java.lang.IllegalArgumentException:参数数目错误
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:47)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:44)
在junitparams.internal.InvokeParameterisedMethod.evaluate(InvokeParameterisedMethod.java:211)
位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
位于org.junit.internal.runners.statements.runafter.evaluate(runafter.java:27)
位于junitparams.internal.ParameterizedTestMethodRunner.runMethodInvoker(ParameterizedTestMethodRunner.java:47)
位于junitparams.internal.ParameterizedTestMethodRunner.runTestMethod(ParameterizedTestMethodRunner.java:40)
位于junitparams.internal.ParameterizedTestClassRunner.RunParameterizedTest(ParameterizedTestClassRunner.java:147)
位于junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:414)
位于junitparams.JUnitParamsRunner.runChild(JUnitParamsRunner.java:385)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:309)
位于org.junit.runner.JUnitCore.run(JUnitCore.java:160)
位于com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
位于com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
位于com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

您可以按如下方式执行参数化测试用例:

@RunWith(JUnitParamsRunner.class)

public class ****

{
    // ..... code .....

    public static final Object[] getTableData()
    {

        return new Object[][] {{data1},{data2},{data3}};

    }

    @Test
    @Parameters(method = "getTableData")

    public void p1(String tblData)
    {

        //.....code.....

        hp.checkLinks(tblData);

        //.....code.....

    }
    // .... code .....
}

这样试试。这可能有用。这是另一种方法。

不清楚问题出在哪里-有大量关于如何使用参数化JUnit测试的文档;你被困在哪里了?@OliverCharlesworth试图按照文档进行操作,但我无法让它工作。也许我没有正确地添加它,如果我按原样运行我的测试,我会得到一个错误,说不匹配或参数(我在问题中添加了错误日志)你没有定义任何
@参数,那应该如何工作?@KirilS。我确实试过了,我只是注释掉了我的代码,在发布之前它不起作用。我确实定义了参数,那就是当我遇到错误时,我被卡住了,需要指导,所以我在这里发布了我的观点,要使用
JUnitParamsRunner.class
,在测试中需要
@parameters
,即:
@test@parameters public void P1()