gpt4 book ai didi

java - 当类被参数化时,类的静态字段是否在测试之间共享?

转载 作者:行者123 更新时间:2023-12-01 20:56:32 24 4
gpt4 key购买 nike

我有一个具有静态和非静态字段的类。我为 JUnit 测试参数化此类。现在我怀疑静态字段是否在测试之间共享。如果 @Parameterized 注释仅有助于创建同一类的许多实例,那么我相信静态字段在测试之间共享,但如果它创建不同的类(例如,在后台的类名中添加一些后缀),那么每个类都会有它自己的静态字段。我尝试用这段代码测试它,但没有成功:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.List;

@RunWith(Parameterized.class)
public class Parametrized {
public static String field1;
public String field2;
public int slp;

public Parametrized (String str1, String str2, int slp) {
this.field1 = str1;
this.field2 = str2;
this.slp = slp;
}

@Parameterized.Parameters ()
public static List<Object[]> data() {
return Arrays.asList( new Object[][] {{"1_static", "1_nonstatic", 5000}, {"2_static", "2_nonstatic", 2000}});
}

@Test
public void test_static() throws InterruptedException {
System.out.println(field1);
Thread.sleep(this.slp);
System.out.println(field2);
System.out.println(field1);
}
}

首先,我注意到测试不是并行运行的,而是一个接一个地运行:我认为这是使用 @Parameterized 的要点 - 并行运行测试。

其次,因为它是一个接一个地运行的,所以没有帮助我找出静态字段是否共享。

最佳答案

添加注释不会改变 Java 的工作方式。 static 字段仍然是静态字段。

这不适用于并行运行测试,因为它们可能会相互干扰。例如共享资源,例如静态字段。

顺便说一句,如果您在构造函数中设置静态字段,那么您几乎肯定做错了什么。

关于java - 当类被参数化时,类的静态字段是否在测试之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42268894/

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