gpt4 book ai didi

java - @parameters方法在@beforeclass方法之前执行

转载 作者:行者123 更新时间:2023-12-01 04:57:34 24 4
gpt4 key购买 nike

我正在使用 junit 4 的“参数化”功能,我注意到 @parameters 方法在 @beforeclass 方法之前执行。这给我带来了一个问题,因为我通过 @parameters 传递给测试用例的参数取决于 @beforeclass 方法中的代码初始化。例如

@RunWith(Parameterized.class)
public class TestOtherClass {

String argument;
private static boolean initializeThis;

public TestOtherClass(String parameter) throws Exception {
argument=parameter;
}

@BeforeClass
public static void doSetup() {
System.out.println("Doing setup before class...");
initializeThis=true; // true or false, based on some condition
}

@Test
public void otherTest() {
System.out.println("Other test: " + argument);
}

@Parameters
public static Collection<Object[]> getData(){
System.out.println("Inside parameter");
String addThis;
if(initializeThis)
addThis="adding true";
else
addThis="adding false";

Object[] para1 = new Object[]{"First parameter :: " + addThis};
Object[] para2 = new Object[]{"Second parameter :: " + addThis};

Collection<Object[]> classNames = new ArrayList<Object[]>();
classNames.add(para1);
classNames.add(para2);
return classNames;
}
}

现在,我在 @beforeclass 方法中将变量“initializeThis”初始化为 true,但是(令人惊讶的是)当我执行测试用例时,它会打印

Other test: First parameter :: adding false
Other test: Second parameter :: adding false

这是出乎意料的。
我的问题是;有没有办法在@parameters之前执行@beforeclass方法,我们可以在junit 4中这样做吗?

最佳答案

我会使用普通的旧 java static {..} 初始化程序而不是 @BeforeClass,例如:

@RunWith(Parameterized.class)
public class TestOtherClass {

String argument;
private static boolean initializeThis;

public TestOtherClass(String parameter) throws Exception {
argument=parameter;
}

static {
doSetup();
}

// @BeforeClass
public static void doSetup() {
System.out.println("Doing setup before class...");
initializeThis=true; // true or false, based on some condition
}

@Test
public void otherTest() {
System.out.println("Other test: " + argument);
}

@Parameters
public static Collection<Object[]> getData(){
System.out.println("Inside parameter");
String addThis;
if(initializeThis)
addThis="adding true";
else
addThis="adding false";

Object[] para1 = new Object[]{"First parameter :: " + addThis};
Object[] para2 = new Object[]{"Second parameter :: " + addThis};

Collection<Object[]> classNames = new ArrayList<Object[]>();
classNames.add(para1);
classNames.add(para2);
return classNames;
}
}

我知道的唯一缺点是从中继承的类将无法覆盖静态初始化程序,而 @BeforeClass 在这方面提供了一些自由;

关于java - @parameters方法在@beforeclass方法之前执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13862315/

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