我在一个Spring Boot模块中有这个基础测试类:
@ActiveProfiles("test")
@SpringBootTest(classes = {WebServiceApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class BaseWebServiceTest {
//...
}
如果由于某种原因应用程序无法启动(在我的情况下,如果没有启动localstack docker镜像,如果Spring Cloud Contract存根不可用等),测试仍在运行,显然它们都会失败。如果未加载ApplicationContext,是否有任何方法可以跳过所有测试?
答案 0 :(得分:2)
如果未加载ApplicationContext,是否有任何方法可以跳过所有测试?
没有。如果ApplicationContext
未加载,则无法自动跳过测试。
但是,您可以使用JUnit 4的假设支持,并根据您选择的某些布尔条件中止测试的执行。例如,如果您可以检查docker镜像是否已启动,则可以执行与以下类似的操作。
public static boolean dockerImagedStarted() {
// return true if the Docker image started...
}
@BeforeClass
public static void ensureDockerImageStarted() {
org.junit.Assume.assumeTrue(dockerImagedStarted());
}
P.S。请注意,有一个开放的JIRA问题,要求内置功能,以避免重复尝试加载ApplicationContext
。有关详细信息,请参阅SPR-9548。
答案 1 :(得分:1)
如果未加载ApplicationContext
public class CustomRunner extends BlockJUnit4ClassRunner {
public CustomRunner(Class<?> clazz) throws InitializationError {
super(clazz);
}
@Override
protected boolean isIgnored(FrameworkMethod child) {
return shouldIgnore() || super.isIgnored(child);
}
/**
*
* @return if your test should be ignored or not
*/
private boolean shouldIgnore() {
// Some check if your docker is up
return true;
}
}
使用@RunWith
与您创建的CustomRunner
@RunWith(CustomRunner.class)
@ActiveProfiles("test")
@SpringBootTest(classes = {WebServiceApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class BaseWebServiceTest {
//...
}