免责声明:我知道这是一个非常糟糕的设计,实际上让测试相互依赖以设置任何类型的变量。但是,我必须将这些测试迁移到 Arquillian 并且重写一切都是不可能的。
问题:我有使用一些实例变量的测试方法,如下所示:
public int myNumber= 0;
@Test
public void testOne() {
// do something with myNumber
}
@Test(dependsOnMethods = "testOne")
public void testTwo {
// do something with myNumber
这曾经使用 jboss 微容器来工作。但是,在使用 Arquillian 在容器中运行此类测试时,它不会。让这项工作再次发挥作用的最简单方法是什么?现在我只是将所有字段设置为静态,这很有效。这样做有什么负面影响吗?
编辑:塞德里克的建议也不起作用,这可能是由于实例变量不起作用的相同原因。Arquillian 为每个方法调用整个生命周期,@Test
看起来它也为每个方法注入了一个新ITestContext
的@Test
。这是我尝试过的:
Integer number = new Integer(10);
static final String NUMBER = "number";
@Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER)
public void testOne(ITestContext ctx) {
System.out.println("TEST ONE: " + number);
number += 100;
ctx.setAttribute(NUMBER, number);
System.out.println("CONTEXT " + ctx.getName());
System.out.println("CONTEXT " + ctx.getAttribute(NUMBER));
}
@Test(dependsOnMethods="testOne", dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER)
public void testTwo(ITestContext ctx) {
System.out.println("TEST TWO: " + number);
System.out.println("CONTEXT " + ctx.getName());
System.out.println("CONTEXT " + ctx.getAttribute(NUMBER));
}
结果:
TEST ONE: 10
CONTEXT Arquillian - class com.example.ServerTest
CONTEXT 110
TEST TWO: 10
CONTEXT Arquillian - class com.example.ServerTest
CONTEXT null