【发布时间】:2017-11-17 19:01:05
【问题描述】:
我使用 TestNG 作为我的 Java 测试框架,我需要一个给定的测试类来维护一些状态,这些状态将被几种测试方法使用。具体来说,我希望在运行任何测试之前将这个状态初始化一次,然后让它可用于类中的任何后续测试。
根据我的阅读,@BeforeClass 注释可以添加到方法中,该方法将在运行任何测试之前运行。但是,我一直注意到非常奇怪的行为。考虑以下示例代码,它是我实际设置的精炼版本:
public class MyTestClass {
private static String[][] array;
@BeforeClass
public void setup() {
array = new String[][] {{"A", "B", "C"},{"D", "E", "F"},{"G", "H", "I"}};
}
@Test
public void someTest() {
// use 'array'
// but the data might be corrupted
}
}
以上是一个简化,但我注意到我在@BeforeClass 方法中初始化的static 变量似乎稍后会更改它们的值。
为 TestNG 单元测试设置一些共享/静态状态的正确方法是什么?
【问题讨论】:
-
您的设置看起来不错 - 您能否提供一个重现错误结果的示例? (您不会在测试中修改数组,对吧?)
-
@assylias 我没有发布完整的代码,因为它太长了。我要告诉你的是,以前我有 getter 辅助方法,每个方法都返回一个二维数组,这些数组通常被多个测试使用。我认为重用东西是个好主意,因此我尝试使用
@BeforeTest方法。 -
我观察到的是数组的值似乎只是变成了随机值。这当然会导致测试中断。现在,我正在恢复使用更安全的代码。
-
单元测试方法不应以任何方式相互依赖,因此不应共享任何状态!
-
@TimothyTruckle 这听起来像是对我的回答。
标签: java unit-testing testng