我正在使用 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使用@Parameterized:
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() 函数?
最近遇到了类似的问题,并使用Function解决了问题。下面的示例。
@RunWith(Parameterized.class)
public class MyClassTest {
@Parameterized.Parameters
public static Iterable functions() {
return Arrays.<Object, Object>asList(
param -> new Object()
);
}
Object param;
Function function;
public MyClassTest(Function f) {
this.function = f;
}
@Before
public void before() {
// construct dependency
param = "some value";
}
@Test
public void test() {
assertThat(myClass.doSomething(function.apply(param)), is(equalTo(expectedValue)));
}
}
在您的场景中,在@Before或@BeforeClass中设置数据库,然后注入到函数中
虽然是一个有点不同的解决方案,但是静态块可以解决这个问题。还要注意,它必须在Test1.class中,但是除此之外,它也可以工作;-)
@RunWith(Parameterized.class)
public class Test1 {
static{
System.out.println("Executed before everything");
}
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
}
}
不幸的是,这正按计划进行。JUnit需要在开始测试之前枚举所有的测试用例,对于参数化测试,该方法用< code > @ Parameterized进行注释。参数用于确定有多少测试。
基本的问题是,当我将JUnit测试分组为套件或套件组时,所有测试的< code>@Parameters方法在单独的套件或测试执行之前首先运行。我们的设置如下: 我们有多个测试类文件,每个文件都有包含实际测试的静态内部类。 以此类推,,等。现在,为了将所有这些测试套件收集到一个更大的集合中,我创建了一个更大型的测试套件,如下所示: 但是,无论我是运行主套件,还是,所有内部类的方法都在所有方法或实际测
我试图定义一个,如示例MockitoExtension所提供的,但无法成功地使用参数化的类实例。 期待着关于如何用在中实现接口的类的参数化实例测试接口的建议。
问题内容: 在JUnit 4中,使用批注很容易在多个类中测试不变式。关键是要针对单个参数列表运行一组测试。 如何在不使用JUnit-vintage的情况下在JUnit 5中复制它? 不适用于测试课程。听起来似乎很合适,但是注释的目标也是一种方法。 此类JUnit 4测试的示例是: 问题答案: JUnit 5中的参数化测试功能所提供的 功能与JUnit 4所提供的功能完全不同。引入了具有更大灵活性的
参数化测试可以将不同的数据输入到测试中。不过,我创建了一个示例计算器,希望为其创建参数化测试。但是,我发现您只能为单个测试创建一组参数化数据。 我已经创建了参数化测试,用于添加两个数字,得到预期的结果。由于预期结果会有所不同,因此该数据将不适用于减法运算。 有没有可能为每个加、减、乘、除测试提供参数化数据? 非常感谢您的建议,
在Eclipse中使用参数化JUnit测试时,当我想重新运行一个测试时,遇到了一个问题。测试本身运行良好,虽然我可以从上下文菜单重新运行第一个测试,但可以重新运行第二个测试: 失败,并显示以下消息: JAVAlang.Exception:未找到匹配[{ExactMatcher:fDisplayName=test[1:A2]的测试-- 我很确定这是因为JUnit不喜欢我的数组;在某些情况下:我用它来
我正在尝试使用Zerocode使用Junit(4)运行负载测试。通过遵循这些教程,我能够运行现有的Junit测试类 使用零代码框架使用JUnit进行负载测试 我有一个Junit测试套件可以正常工作,我想知道如何使用zerocode来启动这个测试套件,以便它可以运行负载测试所有测试类中的所有测试。上面的例子描述了如何运行选定的测试方法,或者只运行少数测试方法。