1

我曾尝试将 @DataProvider 与 TestNG 和 arquillian 一起使用,但我无法弄清楚为什么当我使用我创建的类时它不起作用。

如果我将它与 String 或任何原始数据类型一起使用,我的 @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")}};
}

才不是。第二种方法只给我空指针。

有任何想法吗?

4

3 回答 3

6

改为返回以下内容。

return new Object[][]{
      {new User("test1")},
      {new User("test2")},
      {new User("test2")}};

更好的是,如果您经常使用 DataProvider,您可以在 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"));
于 2014-03-30T19:39:08.910 回答
2

您必须返回一个数组数组,这种语法的动机是为 n 个测试用例提供 n 个参数。因此,正确的语法是返回User每个测试。

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);
  }
}
于 2013-10-21T20:51:33.123 回答
0
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataPro {

    @Test(dataProvider = "Sender")  
    public void Receiver(String first, String second)
    {
        System.out.print(first);
        System.out.print(second);
    }

    @DataProvider
    public Object[][] Sender()
    {
        Object[][] data = new Object[2][2];
        data[0][0] = "a";
        data[0][1] = "b";
        data[1][0] = "c";
        data[1][1] = "d";
        return data;
    }

}
于 2018-06-21T21:41:37.303 回答