spring - 将 Spring bean 注入(inject) JUnit Jupiter 中的 ParameterResolver

标签 spring junit junit5 spring-test junit-jupiter

尝试将 Spring 组件 (DataSource) Autowiring 到 JUnit ParameterResolver 中。但是 DataSource 没有被 Spring 注入(inject)。

我已经注册了 SpringExtension 并提供了上下文位置 (aaspire-test-datasource-components.xml) 来加载 ApplicationContext .

@ContextConfiguration(locations={"classpath:spring-config/aaspire-test-datasource- 
 components.xml"})
@ExtendWith(SpringExtension.class)
public class gdnContextResolver implements ParameterResolver
{   
    @Autowired
    private DataSource dataSource;

    @Override
    public boolean supportsParameter(ParameterContext parameterContext, 
      ExtensionContext extensionContext) throws ParameterResolutionException {
       return parameterContext.getParameter().getType() == gdnContext.class;
    }

    @Override
    public Object resolveParameter(ParameterContext parameterContext, 
     ExtensionContext extensionContext) throws ParameterResolutionException {
     
      try {
        return  SpringBatchJobUtil.createJobExecutionGdnContext(dataSource);
     } catch (Exception e) {            
        throw new ParameterResolutionException(ExceptionUtil.getMessageText(e));
     }    
      
   }
}

最佳答案

您无法通过 @ExtendWith 在扩展上注册扩展。

此外,Spring 注解(例如 @ContextConfiguration)无法应用于扩展,并且您无法将 Spring 组件 Autowiring 到扩展中。

因此,您需要删除 @ExtendWith@ContextConfiguration 声明,而不是将 DataSource Autowiring 到扩展中的字段中您需要使用 SpringExtension 检索“当前测试”的 ApplicationContext

您可以在 resolveParameter() 实现中实现后者,如下所示。

DataSource dataSource = SpringExtension.getApplicationContext(extensionContext).getBean(DataSource.class);

关于spring - 将 Spring bean 注入(inject) JUnit Jupiter 中的 ParameterResolver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71866678/

相关文章:

java - Junit 5 (jupiter) 使用 Maven 进行条件执行

java - getBeansOfType(Class<T> 类型)

Spring 应用程序监听器而不是线程

java - 以编程方式将 DirectChannelMetrics 注册为 JMX Bean

java - 使用 JUnit 运行测试用例时,在 Eclipse 调试中禁用拖放到框架功能

java - 如何添加不从 TestCase 扩展到 TestSuite 的 JUnit 4 测试?

groovy - 使用 JUnit 5 运行 Groovy 测试用例

java - Feign抛出错误而不是返回ResponseEntity,如何回到调用者方法

java - Proguard 说它找不到任何类

java - Junit-快速检查 : Generate String matching a pattern