[英]DataProvider on TestNG
我試圖將@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")}};
}
才不是。 第二種方法只給我空指針。
有任何想法嗎?
返回以下內容。
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"));
您必須返回一個數組數組,這種語法是由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);
}
}
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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.