java - 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)
即用。
但是仍然需要一个配置类(甚至是一个空的)。
解决方案
正如其他答案和评论中指出的那样,您需要指定一个空配置源,特别是@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 {
}
}
推荐阅读
- angular - 如何将不记名令牌应用于 Devextreme dxdata 网格的 odata 源
- php - 不推荐使用 each() 函数。此消息将在进一步调用 PHP 7.2 时被抑制
- esp8266 - 使用ESP8266时路由器中断后无法自动重新连接WiFi
- java - Java:结合使用 BufferedReader 和 PrintWriter 会导致问题
- css - 可以逐帧查看css过渡吗?
- php - 解析 jQuery 的 .get() AJAX 方法
- java - 如何通过 Selenium 和 Java 在网站 https://www.phptravels.net 中调用显式等待以单击带有文本的元素作为我的帐户
- mvvm - 接口绑定到没有 MVVM 包的 ViewModel
- asp.net-core - IIS Express/Kestrel 挂起 OPTIONS 请求
- php - Code Igniter 在我的 HTML 视图中插入 PHP 脚本导致错误