Java 按顺序为DataProvider中的每个数据集运行一组测试
我需要在Java 按顺序为DataProvider中的每个数据集运行一组测试,java,testng,Java,Testng,我需要在数据提供程序中的每个数据之前运行一些测试 例如,在下面的示例类中,我需要运行someStartTest 4次(在每个数据之前),如何做到这一点 public class Poligon { @Test() public void someStart(){ System.out.println("Start"); } @DataProvider public Object[][] getData() { retur
数据提供程序
中的每个数据之前运行一些测试例如,在下面的示例类中,我需要运行
someStart
Test 4次(在每个数据之前),如何做到这一点
public class Poligon {
@Test()
public void someStart(){
System.out.println("Start");
}
@DataProvider
public Object[][] getData() {
return new Object[][]{{"a",1},{"c",2},{"d",4},{"x",0}};
}
@Parameters({"p","n"})
@Test(dataProvider = "getData", dependsOnMethods = "someStart")
public void x(String p, int n){
String[] a = {"a","b","c","d"};
int i = 0;
while( i < a.length && !a[i].equals(p)) i++;
i = (i < a.length)? i + 1 : 0;
System.out.println(p + ": " + i);
Assert.assertEquals(i, n);
}
@Test(dependsOnMethods = "x", alwaysRun = true)
public void someEnd(){
System.out.println("End");
}
}
我在这个网站上找到了答案:和。但这不是我真正需要的。 我无法使用不同的
工厂运行多组测试,如果没有它,则无法按预期顺序运行
第一:添加了带有工厂的类
2en:在测试类中添加了局部变量和构造函数
工厂等级:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
@Test()
public class Poligon2 {
@Factory(dataProvider = "class-data-provider")
public Object[] getTestClasses(String s, int n) {
Object[] tests = new Object[1];
tests[0] = new Poligon(s, n);
return tests;
}
@DataProvider(name = "class-data-provider")
public Object[][] getData() {
return new Object[][]{{"a", 1}, {"c", 3}, {"d", 4}, {"x", 0}};
}
}
测试类别:
import org.testng.Assert;
import org.testng.annotations.*;
public class Poligon {
final String p;
final int n;
int run = 0;
static int instance = 0;
final int current_instance;
static int globalrun = 0;
public Poligon(String p, int n){
this.p = p;
this.n = n;
instance++;
current_instance = instance;
}
@Test()
public void someStart(){
System.out.println("Start");
System.out.println(String.format("Instance: %d; Instance run: %d; Global run %d.", current_instance, run++, globalrun++));
}
@Test(dependsOnMethods = "someStart")
public void x(){
String[] a = {"a","b","c","d"};
int i = 0;
while( i < a.length && !a[i].equals(p)) i++;
i = (i < a.length)? i + 1 : 0;
System.out.println(p + ": " + i);
System.out.println(String.format("Instance: %d; Instance run: %d; Global run %d.", current_instance, run++, globalrun++));
Assert.assertEquals(i, n);
}
@Test(dependsOnMethods = "x", alwaysRun = true)
public void someEnd(){
System.out.println("End");
System.out.println(String.format("Instance: %d; Instance run: %d; Global run %d.", current_instance, run++, globalrun++));
}
}
我在这个网站上找到了答案:和。但这不是我真正需要的。
我无法使用不同的工厂运行多组测试,如果没有它,则无法按预期顺序运行
第一:添加了带有工厂的类
2en:在测试类中添加了局部变量和构造函数
工厂等级:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
@Test()
public class Poligon2 {
@Factory(dataProvider = "class-data-provider")
public Object[] getTestClasses(String s, int n) {
Object[] tests = new Object[1];
tests[0] = new Poligon(s, n);
return tests;
}
@DataProvider(name = "class-data-provider")
public Object[][] getData() {
return new Object[][]{{"a", 1}, {"c", 3}, {"d", 4}, {"x", 0}};
}
}
测试类别:
import org.testng.Assert;
import org.testng.annotations.*;
public class Poligon {
final String p;
final int n;
int run = 0;
static int instance = 0;
final int current_instance;
static int globalrun = 0;
public Poligon(String p, int n){
this.p = p;
this.n = n;
instance++;
current_instance = instance;
}
@Test()
public void someStart(){
System.out.println("Start");
System.out.println(String.format("Instance: %d; Instance run: %d; Global run %d.", current_instance, run++, globalrun++));
}
@Test(dependsOnMethods = "someStart")
public void x(){
String[] a = {"a","b","c","d"};
int i = 0;
while( i < a.length && !a[i].equals(p)) i++;
i = (i < a.length)? i + 1 : 0;
System.out.println(p + ": " + i);
System.out.println(String.format("Instance: %d; Instance run: %d; Global run %d.", current_instance, run++, globalrun++));
Assert.assertEquals(i, n);
}
@Test(dependsOnMethods = "x", alwaysRun = true)
public void someEnd(){
System.out.println("End");
System.out.println(String.format("Instance: %d; Instance run: %d; Global run %d.", current_instance, run++, globalrun++));
}
}
如果您需要调用someStart()的内容,请将其放入“for”循环中。我不知道你为什么需要调用test 4次?如果这只是为了让其他考试通过,我认为这是糟糕的笔试。测试不应该相互依赖。这只是一个例子,我需要在使用数据提供程序进行测试之前运行一些测试…所以就像我之前所说的,测试不应该相互依赖。我知道我可以将someStart
和x
连接起来,问题是我需要拆分x
进行最简单(更详细)的测试。有可能吗?我认为您可以循环使用从getData返回的对象[],并在someStart测试中测试它。我的意思是,如果需要调用someStart()调用的内容,调用对象[]的每个元素所需的任何测试4次,将其放入“for”循环中。我不知道你为什么需要调用test 4次?如果这只是为了让其他考试通过,我认为这是糟糕的笔试。测试不应该相互依赖。这只是一个例子,我需要在使用数据提供程序进行测试之前运行一些测试…所以就像我之前所说的,测试不应该相互依赖。我知道我可以将someStart
和x
连接起来,问题是我需要拆分x
进行最简单(更详细)的测试。有可能吗?我认为您可以循环使用从getData返回的对象[],并在someStart测试中测试它。我的意思是,无论你对对象[]的每个元素做什么测试,你都应该接受你的答案,这样问题就结束了。当我现在尝试这样做时,我得到的信息是:你明天可以接受你自己的答案,你应该接受你的答案,这样问题就结束了。当我现在尝试这样做时,我得到的信息是:你明天可以接受你自己的答案