尝试将 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/