如何解决Spring Boot WebFluxTest测试,无法实例化存储库,指定的类是接口
我正在为@WebFluxTest
用@RestController
编写集成测试。
这是我的课程:
@RestController
@RequestMapping("/usager")
public class UsagerController {
@Autowired
private UsagerService usagerService;
@GetMapping
public Usager getUsager() {
return usagerService.create();
}
}
@Service
public class UsagerService implements CrudService<Usager,Integer> {
@Autowired
private UsagerRepository usagerRepository;
@Override
public JpaRepository<Usager,Integer> getRepository() {
return usagerRepository;
}
@Override
public Usager create() {
return new Usager();
}
}
@Repository
public interface UsagerRepository extends JpaRepository<Usager,Integer>,JpaSpecificationExecutor<Usager> {
}
@ExtendWith(SpringExtension.class)
@WebFluxTest(UsagerController.class)
@Import({ UsagerService.class,UsagerRepository.class })
@Tag(TestCase.INTEGRATION)
public class UsagerControllerIT {
@Autowired
private WebTestClient wtc;
@Test
public void getUsager_returnUsager() {
ResponseSpec rs = wtc.get().uri("/usager").exchange();
rs.expectStatus().isOk();
rs.expectHeader().contentType(MediaType.APPLICATION_JSON);
rs.expectBody(Usager.class).isEqualTo(new Usager());
}
}
我收到以下异常:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.dsi.bibliosys.biblioback.repository.UsagerRepository]: Specified class is an interface
我不明白为什么Spring无法注入存储库。 有人有主意吗?
我尝试了另一种使用@SpringBootTest
的方法。这是我的新测试课:
@ExtendWith(SpringExtension.class)
@SpringBootTest
@Tag(TestCase.INTEGRATION)
public class UsagerController02IT {
@Autowired
private UsagerController usagerController;
@Test
public void getUsager_returnUsager() {
WebTestClient wtc = WebTestClient.bindToController(usagerController).build();
ResponseSpec rs = wtc.get().uri("/usager").exchange();
rs.expectStatus().isOk();
rs.expectHeader().contentType(MediaType.APPLICATION_JSON);
rs.expectBody(Usager.class).isEqualTo(new Usager());
}
}
我收到此异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.dsi.bibliosys.biblioback.controller.UsagerController': Unsatisfied dependency expressed through field 'usagerService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.dsi.bibliosys.biblioback.service.entity.UsagerService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我不明白为什么UserService
在应用程序上下文中不可用。
感谢您的帮助。
解决方法
这看起来与this非常相似。我建议调查一下您的测试配置,并在适当时添加它。
春天@WebFluxTest
上的quote
使用此批注将禁用完全自动配置,而是仅应用与WebFlux测试相关的配置(即@ Controller,@ ControllerAdvice,@ JsonComponent,Converter / GenericConverter和WebFluxConfigurer Bean,而不适用于@ Component,@ Service或@Repository bean)。
, @Import
注释的参数只能是带有注释的@Configuration
类-请参见doc
您应删除带有@Import
的行,因为它在这里没有给您任何帮助并被滥用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。