我有一个JUnit测试类,其中有几个static final int
可以在测试器代码的顶部重新定义,以允许测试值的某些变化。我在@BeforeClass方法中有逻辑,以确保开发人员输入的值不会破坏我的测试。
如果开发人员设置boolean useRandomValues = true;
,我希望通过允许在@BeforeClass方法中将这些整数设置为(合理的)随机值来进一步改进变体。我可以简单地删除final
关键字以允许随机值覆盖初始化值,但我有final
以确保这些值不会无意中更改,因为某些测试依赖于这些值的一致性值。
我可以在JUnit测试类中使用构造函数吗?如果我试图将@BeforeClass变成测试类的构造函数,Eclipse会开始在任何地方放置红色下划线,并且创建一个单独的构造函数似乎不允许赋值给这些变量(即使我在声明时将它们保留为未分配); < / p>
还有另一种方法可以确保在@BeforeClass方法之后更改这些变量的任何尝试都会导致编译时错误吗?
我可以在初始化之后做出最终的吗?
答案 0 :(得分:2)
您可以使用静态构造函数执行此操作:
import java.util.Random;
public class StaticRandom
{
private static final boolean useRandomValues = true;
private static final Random r = new Random();
private static final int value1;
private static final int value2;
private static final int value3;
static
{
if(useRandomValues)
{
value1 = r.nextInt();
value2 = r.nextInt();
value3 = r.nextInt();
}
else
{
value1 = 0;
value2 = 0;
value3 = 0;
}
}
}
答案 1 :(得分:2)
您可以使用静态初始值设定项:
final static boolean useRandomValues = true;
final static int valueA;
final static int valueB;
static {
if(!useRandomValues) {
valueA = 42;
valueB = 1337;
}
else {
Random rnd = new Random();
valueA = rnd.nextInt(100);
valueB = rnd.nextInt(100);
}
}