gpt4 book ai didi

testng - 在一个类中的 Arquillian TestNG 测试方法中的测试之间共享实例变量

转载 作者:行者123 更新时间:2023-12-02 05:00:13 25 4
gpt4 key购买 nike

免责声明:我知道这是一个非常糟糕的设计,实际上让测试相互依赖以设置任何类型的变量。但是,我必须将这些测试迁移到 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 在容器内运行此类测试。让这项工作再次发挥作用的最简单方法是什么?现在我只是将所有字段设置为静态,这很有效。这样做有什么负面影响吗?


编辑:Cedric 的建议也不起作用,这可能是由于实例变量不起作用的相同原因。 Arquillian 为每个 @Test 方法调用整个生命周期,看起来它也为每个 @Test 注入(inject)了一个新的 ITestContext。这是我尝试过的:

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

最佳答案

我不确定是什么导致它停止运行(它应该可以工作),但是你可以在这两个方法的签名中声明一个 ITestContext,它将由 TestNG 注入(inject),然后调用 setAttribute/getAttribute 以在您的方法之间共享参数。

关于testng - 在一个类中的 Arquillian TestNG 测试方法中的测试之间共享实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com