我正在使用JUnit测试套件运行几个测试,其中一个测试使用@Parameterized多次运行。我发现当我运行测试时,@Parameterized函数在@BeforeClass之前运行。这是预期行为还是发生了其他事情?我本以为@BeforeClass会在任何测试开始之前运行。
下面是我的测试套件:
@RunWith(Suite.class)
@SuiteClasses({ Test1.class, Test2.class })
public class TestSuite {
@BeforeClass
public static void setup() throws Exception {
// setup, I want this to be run before anything else
}
}
测试1使用@参数化:
public class Test1 {
private String value;
// @Parameterized function which appears to run before @BeforeClass setup()
@Parameterized.Parameters
public static Collection<Object[]> configurations() throws InterruptedException {
// Code which relies on setup() to be run first
}
public Test1(String value) {
this.value = value;
}
@Test
public void testA() {
// Test
}
}
如何修复这个问题,以便在运行其他任何操作之前运行@BeforeClass setup()函数?
5条答案
按热度按时间oyt4ldly1#
不幸的是,这是按预期工作的,JUnit需要在开始测试之前枚举所有测试用例,对于参数化测试,使用
@Parameterized.Parameters
注解的方法来确定有多少测试。vvppvyoh2#
虽然是一个有点different的解决方案,一个静态块就可以了。还要注意,它必须在Test1.class中。但是除此之外,它还可以工作;- )
iqjalb3h3#
最近遇到了类似的问题,并使用函数解决了问题。示例如下。
在您的场景中,在@Before或@BeforeClass中进行数据库设置,然后注入函数
ikfrs5lh4#
我发现了一个强制代码段在所有其他用
@Parameterized.Parameters
注解的方法之前运行的黑客攻击。然后在测试套件中,首先添加以下测试:
qgelzfjb5#
希望这能帮助别人,我只是这样做: