如何以惯用方式使用JUnit4来测试某些代码是否会抛出异常?
虽然我当然可以这样做:
@Test
public void testFooThrowsIndexOutOfBoundsException() {
boolean thrown = false;
try {
foo.doStuff();
} catch (IndexOutOfBoundsException e) {
thrown = true;
}
assertTrue(thrown);
}
Run Code Online (Sandbox Code Playgroud)
我记得有一个注释或一个Assert.xyz或者其他东西,对于这些类型的情况来说,远不如KUndgy 和JUnit的精神.
tl;dr:如何在所有测试运行之前将自定义数据提供程序实例化为 Spring 组件?
是否有一种聪明的方法可以将 Spring 组件注入到实现 的自定义 JUnit Jupiter 扩展中BeforeAllCallback?该beforeAll方法应该在MyTestClass执行之前触发一个复杂的过程@ExtendWith(OncePerTestRunExtension.class)。
我创建了一个 Spring Boot 应用程序 ( src/main/java),它为我的测试 ( src/test/java) 提供了必要的数据。为测试准备数据可能需要长达几个小时的时间。它还使我可以抽象访问一些休息端点。
在所有测试类的过程之间,数据不会改变。所以我只想提取一次数据。
只在一个类中编写所有测试是可行的,但我认为分成不同的类可以提供更好的概览。
我的要求是对一组测试进行一些初始化,并在所有测试完成后将其清除。这些测试围绕几个测试类进行,因为它们不是密切相关的,但需要一个共同的初始化。
我正在使用@SelectClasses来形成套件并尝试使用@ExtendWith应该处理预处理和后处理的自定义扩展。这不起作用,我不确定 JUnit 中是否存在合适的解决方案。共享已经尝试过的示例代码。
套房:
@SelectClasses({FirstTest.class, SecondTest.class})
@ExtendWith(SuiteExtension.class)
@RunWith(JUnitPlatform.class)
@SuiteDisplayName("test suite")
public class SuiteClass {
}
Run Code Online (Sandbox Code Playgroud)
延期:
public class SuiteExtension implements BeforeAllCallback, AfterAllCallback {
@Override
public void afterAll(ExtensionContext context) throws Exception {
System.out.println("afterAll");
}
@Override
public void beforeAll(ExtensionContext context) throws Exception {
System.out.println("beforeAll");
}
}
Run Code Online (Sandbox Code Playgroud)
测试类 1:
public class FirstTest {
@Test
void test1(){
System.out.println("test1");
}
}
Run Code Online (Sandbox Code Playgroud)
测试类 2:
public class SecondTest {
@Test
void test2(){
System.out.println("test2");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
test1
test2
Run Code Online (Sandbox Code Playgroud)
预期输出:
beforeAll
test1
test2 …Run Code Online (Sandbox Code Playgroud)