Spring test integration not run 我如何处理这个错误?
Posted
技术标签:
【中文标题】Spring test integration not run 我如何处理这个错误?【英文标题】:Spring test integration not run how I deal with this error? 【发布时间】:2020-06-11 23:01:11 【问题描述】:我有一个测试课程让我为这个错误而抓狂:
org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为 .imprimirRelatorio 的 bean 时出错:不满意 通过字段存储库表达的依赖关系;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 v1.teste.Service 类型的合格 bean 可用:至少预期 1 个有资格作为自动装配候选者的 bean。依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true)
在网上按分辨率搜索后,我无法运行测试。测试课是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
public class imprimirRelatorio
@Autowired
PautaService pautaRepository;
@Test
public void imprimirCabecalho()
PautaReportBuilder pautaReportBuilder = new PautaReportBuilder();
//Reuniao reuniao = reuniaoService.findOne(UUID.fromString("4c7d3fc8-f78d-4ed3-a1ad-83c5da822ea7"));
try
pautaReportBuilder.cabecalhoRelatorios(reuniao);
catch (Exception e)
e.printStackTrace();
/* 更新 */
所以我忘了说我已经尝试了pautaService接口中的注解@service。在我尝试使用 @SpringBootTest 注释的测试类上也是如此。所以错误信息是不同的。
App.class
@SpringBootApplication
@ComponentScan("br.com.empresa123.sistema123.*")
public class App public static void main(String[] args)
SpringApplication.run(App.class, args);
PautaService接口:
@Service
public interface PautaService
Page<Pauta> findAll(Pageable page);
Pauta findOne(UUID uuid);
Pauta save(Pauta pauta);
这是我测试的第一种方法,嵌套异常是:
org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“subjectController”的 bean 时出错:不满意 通过字段“subjectService”表达的依赖关系;嵌套异常 是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“subjectService”的 bean 时出错:不满足的依赖关系 通过字段“domainSvc”表示;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“dominio”的 bean 时出错:不满足的依赖关系 通过字段“domainRepo”表示;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“domainReposImpl”的 bean 时出错:不满意 通过字段“sqlGenericPager”表示的依赖关系;嵌套异常 是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 “java.lang.String”类型的合格 bean 可用:预计在 至少 1 个符合自动装配候选资格的 bean。依赖 注释: @org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=sql-Generic-Pager)
【问题讨论】:
您的 PautaService 是否使用 @Service 进行了注解,它是否实现了v1.teste.Service
?我相信刚启动应用程序时您会遇到类似的错误。分享更多代码
不,PautaService 没有注释,但 PautaServiceImpl 有。我尝试用@Service 注释接口 PautaService 但仍然无法正常工作。
【参考方案1】:
对于集成测试,请在您的类上添加 @SpringBootTest
。
如果您的文件不在您的应用程序包中,请@ComponentScan()
您的应用程序包。
【讨论】:
感谢 GabLeg ,但我尝试使用注释@SpringBootTest
并且抛出了很多嵌套异常。我的 App.class 也有 @ComponentScan
这样的注释:@SpringBootApplication @ComponentScan("br.com.empresa123.sistema123.*") public class App public static void main(String[] args) SpringApplication.run(App.class, args);
我说的是在你的班级测试中添加@ComponentScan()
。对困惑感到抱歉。如果您的测试类在文件夹br.com.empresa123.somethingDifferent
下,那么您的@SpringBootTest
没有找到您所有的bean 是正常的,因为他正试图在br.com.empresa123.somethingDifferent
下找到它们。这就是为什么你需要在你的测试类上添加@ComponentScan("br.com.empresa123.sistema123")
。也许您可以添加添加@SpringBootTest
时出现的堆栈跟踪。【参考方案2】:
我认为您忘记使用 @Service 注释对服务进行注释。如果是这样,请用@Service 标记服务CLASS。
【讨论】:
【参考方案3】:当我通过在我从未使用过的代码中丢失的注释进行搜索时,我解决了这个问题:
public abstract class BaseCustomRepository
// the class code
@Autowired
@Qualifier("sql-Generic-Pager")
protected String sqlGenericPager;
我从未使用过自定义存储库实现,因此我将重新考虑我将如何处理此类。感谢许多编码人员浪费时间来帮助我,感谢堆栈溢出来分享我的担忧。
我在笑这个问题,所有的麻烦都是我造成的,就像你在课堂上执行 git blame 命令并看到你的用户编写了错误的代码。
【讨论】:
以上是关于Spring test integration not run 我如何处理这个错误?的主要内容,如果未能解决你的问题,请参考以下文章
Spring test integration not run 我如何处理这个错误?
spring integration:如何从 Spring Controller 调用 Spring Integration?
如何在 Spring Integration 中轮询时根据主题过滤电子邮件