首页 > 解决方案 > SpringExtension 没有显式配置?

问题描述

我有一个 JUnit5 测试SpringExtension。我只需要通过 Spring 注入的环境变量@Value

@ExtendWith(SpringExtension.class)
class MyTest {
    @Value("${myValue}") String myValue;
    ...

这样做,我收到一条错误消息:

无法加载 ApplicationContext 原因:java.lang.IllegalStateException:GenericGroovyXmlContextLoader 和 AnnotationConfigContextLoader 都无法加载 ApplicationContext

当然,Spring需要有上下文配置,所以我把它放到了测试代码中:

@ExtendWith(SpringExtension.class)
@ContextConfiguration
class MyTest {
    @Value("${myValue}") String myValue;

    @Configuration
    static class TestConfig { /*empty*/ }
    ...

虽然这可行,但对我来说,它看起来像是很多不必要的样板代码。有没有更简单的方法?

更新

一种更短的变体是使用@SpringJUnitConfig它既能带来又能@ContextConfiguration开箱@ExtendWith(SpringExtension.class)即用。

但是仍然需要一个配置类(甚至是一个空的)。

标签: javaspringspring-test

解决方案


正如其他答案和评论中指出的那样,您需要指定一个空配置源,特别是@Configuration类、XML 配置文件、Groovy 配置文件或ApplicationContextInitializer.

最简单的方法是创建您自己的组合注释来预定义空配置。

如果您在项目中引入以下@EmptySpringJUnitConfig注解,则可以@SpringJUnitConfig在任何需要空 Spring 的地方使用它(而不是 )ApplicationContext

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Inherited
@SpringJUnitConfig(EmptySpringJUnitConfig.Config.class)
public @interface EmptySpringJUnitConfig {
    @Configuration
    class Config {
    }
}

推荐阅读