假设我有一个这样的测试用例:
setup()
contructor()
test1()
test2()
test3()
teardown()
从执行i junit参数化测试开始,这将以2个参数结束:
setUpBeforeClass
contrcutor called
test1 running
contrcutor called
test2 running
contrcutor called
test3 running
contrcutor called
test1 running
contrcutor called
test2 running
contrcutor called
test3 running
tearDownAfterClass
我需要的是在每个参数之前调用的东西。所以结果就像这样(用“()”改变了方法):
setUpBeforeClass
contrcutor called
setupParam()
test1 running
contrcutor called
test2 running
contrcutor called
test3 running
contrcutor called
tearDownParam()
setupParam()
test1 running
contrcutor called
test2 running
contrcutor called
test3 running
tearDownParam()
tearDownAfterClass
我知道junit测试应该是原子的,但每个参数的设置过程非常昂贵。有没有办法实现这种执行顺序?
提前致谢!
更新
@Before在第一个答案中只会在每次测试前调用。 例如:
setUpBeforeClass
contrcutor called
before
test1 running
contrcutor called
before
test2 running
contrcutor called
before
test3 running
contrcutor called
before
test1 running
contrcutor called
before
test2 running
contrcutor called
before
test3 running
tearDownAfterClass
答案 0 :(得分:1)
使用@Before Annotation
@Before
public void before() {
System.out.println("Before every test ");
}
答案 1 :(得分:0)
如果要将每个参数对象用于多个运行,则意味着必须在静态字段中保留对它们的引用,因为每个测试方法都在不同的对象上运行。
您还可以在静态字段中保留其中一个参数的先前值,并假设其在参数集中具有唯一值,您可以将其用作参数更改的检测器。
这几乎就是你想要的,在第一次测试新参数的构造函数之后运行tearDownParams()
的小故障。
@RunWith(Parameterized.class)
public class SomeTest {
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 1, 4, 3 },
{ 2, 5, 6 },
{ 3, 8, 12 }
});
}
static int lastP1Value = -1;
private int p1;
public SomeTest(int p1, int p2, int p3) {
System.out.println("constructor");
this.p1 = p1;
}
@Test
public void test1() {
System.out.println(" test1");
}
@Test
public void test2() {
System.out.println(" test2");
}
@Before
public void setUp() {
if (lastP1Value != p1) {
if (lastP1Value != -1) {
// this is a bit too late (after constructor for new params...)
tearDownParams();
}
setUpParams();
}
lastP1Value = p1;
}
public static void setUpParams() {
System.out.println(" setUpParams");
}
@AfterClass
public static void tearDownParams() {
System.out.println(" tearDownParams");
}
}