TestNG 中的嵌套测试
Nested tests in TestNG
在 TestNG 中,我有一个参数化的 Test A,它自动从 dataProvider
和 测试 B 每次 A 中的测试完成时都应该执行,因为我想利用 A 中获得的结果。换句话说,我想知道是否可以有以下内容:
给定参数化 @Test A(dataProvider = "inputList")
和 @Test B
,TestNG 将创建以下单元测试并按以下顺序执行它们:
Test A1
Test B1 (Based on A1 result)
Test A2
Test B2 (Based on B2 result)
...
Test An
Test Bn (Based on An result)
任何现有的 TestNG 标签都可以吗?我知道我可以将 @Test B
视为 @After
,但这不会被 TestNG 理解为测试,我需要将测试 B 视为以后报告的测试。
您可以使用 TestNG Factory
。例如:
关于工厂方法
public class TestClass {
private final int p1;
private final int p2;
public TestClass(int p1, int p2) {
this.p1 = p1;
this.p2 = p2;
}
@Factory(dataProvider = "inputList")
public static Object[] createTestClasses() {
return new Object[]{
new TestClass(1, 1),
new TestClass(1, 0),
new TestClass(1, -1),
};
}
@Test
public void A() {
// test `A` code, stores result in some class member field
}
@Test(dependsOnMethods = {"A"})
public void B() {
// test `B` code, uses stored result from test `A`
}
}
关于构造函数
public class TestClass {
private final int p1;
private final int p2;
@Factory(dataProvider = "inputList")
public TestClass(int p1, int p2) {
this.p1 = p1;
this.p2 = p2;
}
@DataProvider
public static Object[][] inputList() {
return new Object[][]{
{1, 1},
{1, 0},
{1, -1}
};
}
@Test
public void A() {
// test `A` code, stores result in some class member field
}
@Test(dependsOnMethods = {"A"})
public void B() {
// test `B` code, uses stored result from test `A`
}
}
请参阅 TestNG 文档页面中的 Factories。
已经提供了很好的答案,如果您只是期待按要求的顺序执行@Test 方法,那么您可以使用优先级。如果你想指定方法之间的依赖关系,那么你可以使用 dependsOnMethods。下面是简单的例子
@Test(priority=1)
public void testA1(){
}
@Test(priority=2,dependsOnMethods="testA1")
public void testB1(){
}
@Test(priority=3)
public void testA2(){
}
@Test(priority=4,dependsOnMethods="testA2")
public void testB2(){
}
在 TestNG 中,我有一个参数化的 Test A,它自动从 dataProvider
和 测试 B 每次 A 中的测试完成时都应该执行,因为我想利用 A 中获得的结果。换句话说,我想知道是否可以有以下内容:
给定参数化 @Test A(dataProvider = "inputList")
和 @Test B
,TestNG 将创建以下单元测试并按以下顺序执行它们:
Test A1
Test B1 (Based on A1 result)
Test A2
Test B2 (Based on B2 result)
...
Test An
Test Bn (Based on An result)
任何现有的 TestNG 标签都可以吗?我知道我可以将 @Test B
视为 @After
,但这不会被 TestNG 理解为测试,我需要将测试 B 视为以后报告的测试。
您可以使用 TestNG Factory
。例如:
关于工厂方法
public class TestClass {
private final int p1;
private final int p2;
public TestClass(int p1, int p2) {
this.p1 = p1;
this.p2 = p2;
}
@Factory(dataProvider = "inputList")
public static Object[] createTestClasses() {
return new Object[]{
new TestClass(1, 1),
new TestClass(1, 0),
new TestClass(1, -1),
};
}
@Test
public void A() {
// test `A` code, stores result in some class member field
}
@Test(dependsOnMethods = {"A"})
public void B() {
// test `B` code, uses stored result from test `A`
}
}
关于构造函数
public class TestClass {
private final int p1;
private final int p2;
@Factory(dataProvider = "inputList")
public TestClass(int p1, int p2) {
this.p1 = p1;
this.p2 = p2;
}
@DataProvider
public static Object[][] inputList() {
return new Object[][]{
{1, 1},
{1, 0},
{1, -1}
};
}
@Test
public void A() {
// test `A` code, stores result in some class member field
}
@Test(dependsOnMethods = {"A"})
public void B() {
// test `B` code, uses stored result from test `A`
}
}
请参阅 TestNG 文档页面中的 Factories。
已经提供了很好的答案,如果您只是期待按要求的顺序执行@Test 方法,那么您可以使用优先级。如果你想指定方法之间的依赖关系,那么你可以使用 dependsOnMethods。下面是简单的例子
@Test(priority=1)
public void testA1(){
}
@Test(priority=2,dependsOnMethods="testA1")
public void testB1(){
}
@Test(priority=3)
public void testA2(){
}
@Test(priority=4,dependsOnMethods="testA2")
public void testB2(){
}