当前位置: 首页 > 知识库问答 >
问题:

无法在测试类中自动连接bean

韦望
2023-03-14

我有一个使用SpringMVC和SpringBoot的项目,我使用IntelliJ。我的项目如下:

main -> java -> mypackage -> authentification -> WebSecurityConfig.java
                          -> configuration -> ApplicationConfiguration.java
                          -> controller -> WelcomeMessageController.java
                          -> service -> WelcomeMessageService.java
                                     -> Impl -> WelcomeMessageServiceImpl.java
test -> java -> mypackage -> WelcomeMessageTest.java

我用@Service注释服务实现。

我用以下内容注释了配置文件

@Configuration
@ComponentScan(basePackages = "mypackage")

在控制器中,我向服务注入

@Autowired
WelcomeMessageService welcomeMessageService;

在测试类中,我使用相同的注释注入相同的服务:

@Autowired
WelcomeMessageService welcomeMessageService;

我用以下方法注释测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationConfiguration.class, loader = SpringApplicationContextLoader.class)
@WebAppConfiguration

控制器中,注入工作正常,但是在测试类中,IntelliJ说:

无法自动连线。找不到WelcomeService类型的beans。

当我运行测试时,它是有效的,但我不明白IntelliJ为什么说它找不到bean。

我发现这个主题说它在 IntelliJ 上发生了一段时间,但我不想使用 @SuppressWarnings 注释。

有没有人有别的办法解决这个问题?

共有2个答案

周越泽
2023-03-14

我也遇到了同样的问题,无法将beans自动下载到集成测试类中。你的问题帮助我解决了这个问题,增加了“ContextConfiguration”注释,而不是我使用的“SpringApplicationConfiguration”。

然而,我现在能看到的唯一区别是你缺少应用程序类(扩展了 SpringBootServletInitializer)或你拥有@Configuration的类中的@EnableAutoConfiguration。

希望这能解决你的问题。最重要的是,在这种非常特殊的情况下,这是由不适当的注释引起的。

年运珧
2023-03-14

对我来说,这是一个组件扫描问题,我的模型在一个单独的模块中,然后是我的Spring Boot App。通常,@SpringBootApplication有一个@ComponentScan,当未指定时,它将扫描如下:

>

  • 可以指定 {@link #basePackageClasses} 或 {@link #basePackages}(或其别名 * {@link #value})来定义要扫描的特定包。如果未定义特定的 * 包,则将从声明此注释的 * 类的包进行扫描。

    如果您的 SpringBootApp Main 类位于不同的包上,那么您需要指定 ComponentScan。如果您使用多个模块,则相同,请在配置类中指定它。

    配置类注释:

    @Configuration
    @ComponentScan(basePackages = "app.data")
    

    测试类注释:

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = { PropertyPlaceholderAutoConfiguration.class, DynamoConfig.class })
    

  •  类似资料:
    • 我想尝试嵌入式数据库测试我的DAO对象在spring应用程序。 在应用程序上下文中,我有以下标记: 我的JUnit测试类需要使用这个bean: 一切正常(创建了“DataSourceEmbedded”bean),但当我试图在PartnerDAOTest类中自动调用它们时,spring抛出了以下异常: testSavePartner(Sandbox.PartnerDaoTest):创建名为“Sand

    • 我正在尝试创建一个Spring Boot测试类,它应该创建Spring上下文,并自动连接服务类以供我测试。 这就是我得到的错误: 原因:org。springframework。豆。工厂NoSuchBeanDefinitionException:没有“com”类型的合格bean。目瞪口呆。戈布斯。基础服务FileImportService'可用:至少需要1个符合autowire候选资格的bean。依

    • 我正在为我的应用程序使用模拟存储库 以下是服务的外观片段: 以下是存储库代码: 当我使用执行main()时,它工作正常。 但是,当我想运行测试类: 它会因以下stacktrace而失败: 原因:org。springframework。豆。工厂NoSuchBean定义异常:没有类型为“edu”的合格bean。勒勒亚克。存储库。WeatherStationRepositoryMock’可用:至少需要1

    • 我想在测试中使用WebTestClient。工作原理如下: 但现在我想将WebTestClient注入到一个helper类中: 下面是一个有问题的测试项目:https://github.com/kicktipp/demo 如何在Helper类上使用WebTestClient?

    • 我创建了使用jdbc处理DB的Dao存储库。 我在我的服务类中自动连接了这个存储库。 然后我尝试在测试类中自动连接我的服务类。 当我开始测试时,我得到下一个错误: 服务中构造函数的参数0需要找不到DaoImpl类型的bean。 我如何解决我的问题?

    • 我有一个应用类 我有控制器课 并且,我想为Application test编写一个测试用例,以确保创建的实例类型为HelloController 但是,我在自动连接 hello控制器变量时遇到错误(找不到 hello 控制器类型的 bean)。根据我的理解,@SpringBootTest应该创建上下文并返回一个实例。我们不需要编写任何上下文 xml 或使用任何注释Config 类来获取实例。缺少了