Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TestNG上的数据提供程序_Java_Testng - Fatal编程技术网

Java TestNG上的数据提供程序

Java TestNG上的数据提供程序,java,testng,Java,Testng,我曾尝试将@DataProvider与TestNG和arquillian一起使用,但我不明白为什么在使用我创建的类时它不起作用 如果将其与字符串或任何基本数据类型一起使用,则@Test方法将成功接收DataProvider填充的对象 @DataProvider(name="test") public Object[][] createdata1() { return new Object[] { {"test1"}, {"test2"}, {"test2"} }; } 上述方法有效,但

我曾尝试将@DataProvider与TestNG和arquillian一起使用,但我不明白为什么在使用我创建的类时它不起作用

如果将其与字符串或任何基本数据类型一起使用,则@Test方法将成功接收DataProvider填充的对象

@DataProvider(name="test")
public Object[][] createdata1() {
    return new Object[] { {"test1"}, {"test2"}, {"test2"} };
}
上述方法有效,但是

@DataProvider(name="test")
public Object[][] createdata1() {
    return new Object[] { {new User("test1")}, {new User("test2")}, {new User("test2")}};
}
没有。第二个方法只给我空指针


有什么想法吗?

您必须返回一个数组数组,这种语法是由n个测试用例的n个参数驱动的。因此,正确的语法应该是每次测试返回
用户

package testng;

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

public class SomeTest {
  @DataProvider(name = "test")
  public Object[][] createdata() {
    return new Object[][] { 
       new Object[] { new User("test1") },
       new Object[] { new User("test2") },
       new Object[] { new User("test2") } };
  }

  @Test(dataProvider = "test")
  public void xxx_happyPath_success(User user) {
    Assert.assertNotNull(user);
  }
}

您必须返回一个数组数组,这种语法是由n个测试用例的n个参数驱动的。因此,正确的语法应该是每次测试返回
用户

package testng;

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

public class SomeTest {
  @DataProvider(name = "test")
  public Object[][] createdata() {
    return new Object[][] { 
       new Object[] { new User("test1") },
       new Object[] { new User("test2") },
       new Object[] { new User("test2") } };
  }

  @Test(dataProvider = "test")
  public void xxx_happyPath_success(User user) {
    Assert.assertNotNull(user);
  }
}

返回以下内容

return new Object[][]{
      {new User("test1")},
      {new User("test2")},
      {new User("test2")}};
更好的是, 如果您经常使用DataProvider,可以在helper类中创建以下helper方法来帮助轻松创建数据

public static Object[][] provideData(Object... arObj) {
    Object[][] arObject = new Object[arObj.length][];

    int index = 0;
    for (Object obj : arObj) {
        arObject[index++] = new Object[]{obj};
    }
    return arObject;
}
因此,以下内容更容易解读->

@DataProvider(name="test")
public Object[][] createdata1() {
    return provideData(new User("Test1"), new User("Test2"), new User("Test3"));

返回以下内容

return new Object[][]{
      {new User("test1")},
      {new User("test2")},
      {new User("test2")}};
更好的是, 如果您经常使用DataProvider,可以在helper类中创建以下helper方法来帮助轻松创建数据

public static Object[][] provideData(Object... arObj) {
    Object[][] arObject = new Object[arObj.length][];

    int index = 0;
    for (Object obj : arObj) {
        arObject[index++] = new Object[]{obj};
    }
    return arObject;
}
因此,以下内容更容易解读->

@DataProvider(name="test")
public Object[][] createdata1() {
    return provideData(new User("Test1"), new User("Test2"), new User("Test3"));