TestNG使用Java对来自同一ArrayList的数据运行多个测试
我刚开始使用TestNG,但在测试方面遇到了问题。在填充ArrayList之后,我尝试获取第一个元素,并在移除它之后(类似队列),但是所有测试看起来都是并行工作的,因为每个测试都获取相同的元素,我的意思是第二个测试在第一个测试从ArrayList移除元素之前开始工作TestNG使用Java对来自同一ArrayList的数据运行多个测试,java,collections,testng,Java,Collections,Testng,我刚开始使用TestNG,但在测试方面遇到了问题。在填充ArrayList之后,我尝试获取第一个元素,并在移除它之后(类似队列),但是所有测试看起来都是并行工作的,因为每个测试都获取相同的元素,我的意思是第二个测试在第一个测试从ArrayList移除元素之前开始工作 Lab1Main inst = new Lab1Main(); ArrayList<String> assets; /** * Method for reading inpu
Lab1Main inst = new Lab1Main();
ArrayList<String> assets;
/**
* Method for reading input from the console
* reads only 2 times
* @return ArrayList<String>
*/
private ArrayList<String> input() {
assets = new ArrayList<String>();
Scanner scan = new Scanner(System.in);
System.out.println("type your data and press enter at ther end");
String line = scan.nextLine();
assets.add(line);
int count = 0;
while (count < 1) {
line = scan.nextLine();
assets.add(line);
count++;
}
scan.close();
System.out.println("Scanner closed" + assets);
return assets;
}
/**
* Test will pass or fail depends on input data
* if input String length less than 3(str.length<3) test will fail
* because mutator(setStr) in class Lab1Main will throws an error and won't initialize the variable
*/
@Test
public void firstTest() {
try {
inst.setStr(assets.get(0));
} catch (StringIndexOutOfBoundsException e) {
System.out.println(e);
} finally {
Assert.assertEquals(inst.getStr(), assets.get(0));
assets.remove(0);
}
}
@Test
public void secondtTest() {
try {
inst.setStr(assets.get(0));
} catch (StringIndexOutOfBoundsException e) {
System.out.println(e);
} finally {
Assert.assertEquals(inst.getStr(), assets.get(0));
assets.remove(0);
}
}
@BeforeTest
public void beforeTest() {
assets = input();
}
@AfterTest
public void afterTest() {
}
}
Lab1Main inst=新的Lab1Main();
ArrayList资产;
/**
*从控制台读取输入的方法
*只读了2次
*@returnarraylist
*/
专用ArrayList输入(){
资产=新的ArrayList();
扫描仪扫描=新扫描仪(System.in);
System.out.println(“键入数据并在另一端按enter键”);
String line=scan.nextLine();
资产。添加(行);
整数计数=0;
而(计数<1){
line=scan.nextLine();
资产。添加(行);
计数++;
}
scan.close();
系统输出打印项次(“扫描仪关闭”+资产);
归还资产;
}
/**
*测试是否通过取决于输入数据
*如果输入字符串长度小于3(str.length),我不能说它回答了我的问题,但这是解决这个问题的方法
public Object[][] sendData() {
return new Object[][] { { assets.get(0) }, { assets.get(1) } };
}
/**
* Test will pass or fail depends on input data if input String length less than
* 3(str.length<3) test will fail because mutator(setStr) in class Lab1Main will
* throws an error and won't initialize the variable
*/
@Test(dataProvider="sendData")
public void firstTest(String data) {
try {
inst.setStr(data);
} catch (StringIndexOutOfBoundsException e) {
System.out.println(e);
} finally {
Assert.assertEquals(inst.getStr(), data);
}
}
public对象[][]sendData(){
返回新对象[][{{assets.get(0)},{assets.get(1)};
}
/**
*如果输入字符串长度小于,测试是否通过取决于输入数据
*3(str.length)
我的意思是,第二个测试在第一个测试从ArrayList中删除元素之前开始工作
TestNG中不保证测试的执行顺序。但是有一个名为dependsOnMethods
的参数,您可以使用该参数对测试进行排序,如下所示:
@Test
public void firstTest() {
//first testcase
}
@Test(dependsOnMethods="firstTest")
public void secondTest() {
//second testcase
}
@Test(dependsOnMethods="secondTest")
public void thirdTest() {
//third testcase
}
有关更多详细信息,请参阅doc。(在链接中搜索单词dependsOnMethods
)这是否意味着测试是并行运行的?不。因为它们的顺序不正确并不意味着它们是并行运行的。类似TestNG的Junit使用以及反射返回的测试方法的顺序取决于JVM的心情。哇!明白了!谢谢!
@Test
public void firstTest() {
//first testcase
}
@Test(dependsOnMethods="firstTest")
public void secondTest() {
//second testcase
}
@Test(dependsOnMethods="secondTest")
public void thirdTest() {
//third testcase
}