gpt4 book ai didi

java - 运行单元测试时出现不满足的依赖关系表达错误

转载 作者:行者123 更新时间:2023-12-01 18:53:16 24 4
gpt4 key购买 nike

我正在开发一个 Spring boot 应用程序,我在其中声明了一个组件,如下所示:

   public class Comp1{

}

我想让它成为一个单例 bean(因为默认情况下该组件是一个单例,所以我没有添加显式声明)。

我向该类添加了一个私有(private)构造函数。

  @Component
public class Comp1{
private Comp1(){
}
}

我有一个定义 bean 的配置类。

   @Configuration
public class Congfig1{
@Bean
public Bean1 getBean1(){
}
}

我还有应用程序和 Controller 类。

   @SpringBootApplication
public class App1{
}

@RestController
public class Controller1{
@Autowired
private Comp1 comp1;
}

我的单元测试用例如下所示:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK,classes = {Config1.class})
public class UnitTest {
@Autowired
private Comp1 com1;

使用上面的代码,如果我运行单元测试,我将得到以下异常。

通过字段“repositoryMaster”表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:

但是,当我将其作为 Spring boot 应用程序运行时,该应用程序运行良好。

当我将Comp1的构造函数公开并在Config1中添加Comp1的bean定义时,没有发生异常。

  @Component
public class Comp1{
public Comp1(){
}
}

@Configuration
public class Congfig1{
@Bean
public Bean1 getBean1(){
}
@Bean
public Comp1 getComp1(){
}
}

有人可以解释一下造成这种差异的原因吗?我假设如果启用了组件扫描,那么应该在应用程序中 Autowiring Bean。

最佳答案

1) 作为私有(private)构造函数,spring 无法创建提及组件类的实例 比较12)一旦@Component被添加到类上,spring将尝试默认创建单例实例。 通过 DI 在需要对象的地方注入(inject)对象。
你甚至不需要使用 @Bean public Comp1 getComp1(){ }

关于java - 运行单元测试时出现不满足的依赖关系表达错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59699429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com