Java 无法在@Test method中使用@BeforeGroup中定义的变量
测试1:Java 无法在@Test method中使用@BeforeGroup中定义的变量,java,testng,Java,Testng,测试1: I have 3 `@Test` methods in three different classes that extends one base class. 测试2: @Test(groups = "group1") public void test1() { System.out.println("Test1 value : " + var); } 测试3: @Test(groups = "group2",dependsOnGroups={"group1"}) pu
I have 3 `@Test` methods in three different classes that extends one base class.
测试2:
@Test(groups = "group1")
public void test1() {
System.out.println("Test1 value : " + var);
}
测试3:
@Test(groups = "group2",dependsOnGroups={"group1"})
public void test2() {
System.out.println("Test2 value : " + var);
}
基类:
公共类测试库{
@Test
public void test3() {
System.out.println("Test3 value : " + var);
}
}
我需要initialize()
方法在'test1()'和'test2()'之前单独执行。变量var
的值仅在这些方法中使用
预期产出:
测试:分组前
Test1值:1
Test3值:0
测试:分组前
Test2值:1
但在上面的代码中,test2中的var值也是0。
如何修复代码以初始化属于组group1和组2的方法的变量?这就是您想要的:
public int var = 0;
@BeforeGroups(value = { "group1", "group2" })
void initialize() {
System.out.println("Before group");
var = 1;
}
输出:
在组运行test1之前运行,var值为:1正在运行 在组
运行变量值为:1的test2之前
通过:test1
通过:测试2 ===============================================
默认测试 测试运行:2,失败:0,跳过:0 ==============================================
默认套件
运行的测试总数:2,失败:0,跳过:0
回答:
var
设置为public
全局变量@BeforeGroups
方法中的var
赋值var
var
,该怎么办var
值,那么您可以考虑使用TestNG
的功能,将参数传递给带有TestNG
注释之一的方法
这样,您的代码将看起来更干净、更沉稳。您可以先查看一下,TestNG通过子类创建一个实例,其中
var
为0
然后,它只对以前创建的一个实例调用一次@BeforeGroups
如果TestNG按预期工作,您应该在某处找到var=1
。
如果要在所有实例中共享值,可以使用
静态变量,或者更好地使用测试上下文:在不同的类中使用组不起作用。代码:public class TestBase{public int var=0;@BeforeGroups(value={“group1”,“group2”})void initialize(){System.out.println(“在组之前”);var=1;}}}公共类TestClass1扩展TestBase{@Test(groups=“group1”)公共void test1(){System.out.println(“test1值:+var”);}}}公共类TestClass2扩展TestBase{@Test(groups=“group2”,dependsOnGroups={“group1”)公共void test2(){System.out.println(”Test2值:“+var);}”运行上述脚本的输出如下:组前Test1值:组前Test2值:0@BeforeGroups中设置的var值没有反映在TestClass2方法中。我想你不想反映TestClass1的BeforeGroup的更改集int。你能粘贴你需要的预期输出吗ed与所有人共享var值,然后只需创建一个静态变量,它将在预期的输出中共享:组测试前1值:组测试前1值:组测试前2值:1测试3值:0我不希望在所有测试方法中共享该值。我只希望测试中属于这些组的值。另外将变量var设置为静态会引发以下错误。java.lang.CompatibleClassChangeError:预期的非静态字段com.amazon.gam.ingestion.uk.Testing.TestClass1.VarTips:始终将代码和预期的输出添加到OP而不是注释中。接下来,非静态字段不是来自项目内部的TestNGt、 如果我理解您的输出,您希望在任何组开始之前运行initialize方法?从预期的输出来看,上面的代码似乎也这样做,不确定为什么您希望Test3值:0。对于不属于任何组的测试,var应该是0吗?1。我的基类是具有所有公共st的测试基类测试用例需要uff,每个子类都有一个/多个测试2。我希望组1和组2中的测试的var值相同。实际上,我需要在测试中使用的值不是整数。DB在BeforeSuite中加载,DB对象在BeforeGroups中创建,这是我试图从测试用例访问的对象。
package practise;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
class TestBase {
public int var = 0;
@BeforeGroups(value = { "group1", "group2" })
void initialize() {
System.out.println("Running Before group");
var = 1;
}
}
/**
* @author mrunal
*
*/
public class SO39910848 extends TestBase {
@Test(groups = "group1")
public void test1() {
System.out.println("Running test1 with value of var as: " + var);
}
@Test(groups = "group2",dependsOnGroups={"group1"})
public void test2() {
System.out.println("Running test2 with value of var as: " + var);
}
public void test3() {
}
}