为什么TestNG的beforeSuite只为一个类提供值,而另一个类却为null?

问题描述 投票:0回答:2

我对 TestNG 中的

BeforeSuite
注释有问题。 我想初始化
beforeSuite()
中的一些变量,以便所有类都可以直接使用它们。只有A类才能获取该值。 B类不能;它变为空。

Base.java:

public class Base {
    public String name;
    @BeforeSuite
    public void beforeSuite(){
        name = "stackoverflow";
    }
}

A.java:

public class A extends Base{
    @Test
    public void test(){
        System.out.println("A name:" + name);
    }

}

B.java

public class B extends Base{
    @Test
    public void test(){
        System.out.println("B name:" + name);
    }

}

textng.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="suite1" parallel="classes" thread-count="1" preserve-order="true">
   <test name="testValue">
        <classes>
            <class name="A"/>
            <class name="B"/>
        </classes>
    </test>
</suite>

测试结果:

mvn clean test
.
.
.
[INFO] Running TestSuite
B name:null
A name:stackoverflow

我的TestNG版本是6.8.8。

java testng
2个回答
1
投票

问题出在测试代码上。您有一个由多个子类扩展的公共基类,并且在基类中您有一个

@BeforeSuite
方法。

通过行为进行 TestNG,保证每个

@BeforeSuite
标记仅执行一次
<suite>
方法。

在您的情况下,它已经被

A
类调用,因此它将被
B
类跳过,这解释了
NullPointerException

要解决此问题,您需要将初始化移动到

@BeforeMethod
@BeforeClass
带注释的方法。


0
投票

如果用例是在基类中的套件设置时设置一个变量,该变量应可用于所有子类,则可以在基类中将该变量设置为静态。

© www.soinside.com 2019 - 2024. All rights reserved.