在与嵌入式 mongo 的集成测试期间连接 bean



我正在使用带有webflux的spring-boot(2.2.7.RELEASE)作为mongodb的小型休息服务。我有 2 个存储库(ARepositoryBRepository)实现了这样的东西:

@Repository
public interface ARepository extends ReactiveMongoRepository<DataDTO, Integer> {
}

我还有一个额外的服务,它正在使用这两个和一个 ReactiveMongoTemplate 实例。它连线的东西是这样的:

@Slf4j
@Service
public class DefaultTheService implements TheService {
private final ARepository aRepository;
private final BRepository bRepository;
private final ReactiveMongoTemplate mongoTemplate;
@Autowired
public DefaultTheService(ARepository aRepository, BRepository bRepository, ReactiveMongoTemplate mongoTemplate) {
this.aRepository = aRepository;
this.bRepository = bRepository;
this.mongoTemplate = mongoTemplate;
}
}

一切都很好,它正常工作,没有问题。

现在,我想写一些集成测试,我开始是这样的:

@DataMongoTest
@Slf4j
class DefaultTheServiceTest {
@Autowired
private ARepository aRepository;
@Autowired
private BRepository bRepository;
@Autowired
private ReactiveMongoTemplate reactiveMongoTemplate;
@Autowired
private DefaultTheService defaultTheService;
@Test
void runTheMagicTest() {
// empty body, I just want to see if everything wires up correctly.
}
}

当我想执行runTheMagicTest(junit5)时,我总是收到此错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.DefaultTheServiceTest': Unsatisfied dependency expressed through field 'defaultTheService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.DefaultTheService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.DefaultTheService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1716)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1272)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1226)

*! 注意 Bean 名称:DefaultTheServiceTest

通常,我也许可以在每次测试之前简单地创建一个 DefaultTheService 实例,然后调用我想要测试的方法,但我想使用 spring 尝试一下。

如果我只是删除private DefaultTheService defaultTheService声明 - 测试正在"运行"。我很确定我错过了一些愚蠢的东西,我正在追逐我的尾巴。

那么,有人可以减轻我的痛苦并指出我正在犯的(可能?)明显的错误吗?

谢谢!

@DataMongoTest

可用于仅关注MongoDB组件的MongoDB测试的注释。

使用此注释将禁用完全自动配置,而是仅应用与MongoDB测试相关的配置。

请尝试改为@SpringBootTest"完整"/默认应用程序上下文。

有关一般信息,请参阅:

  • https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#testing

对于(自动)配置详细信息和细化:

  • https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing
<小时 />

...设置@DataMongoTest(useDefaultFilters = false)(+微调include-/excludeFilters)也可以做所需的操作。

最新更新