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

为什么我不能在测试中直接@AutoWired我的服务,为什么我需要@AutoWired存储库?

双俊人
2023-03-14

我有一个带有repository的spring boot应用程序。

我还使用@service并在其中扩展存储库

当我尝试@AutoWired我拥有的服务时:

原因:org.springframework.beans.factory.noSuchBeanDefinitionException:没有“com.api.core.service.countryService”类型的合格bean可用:应至少有一个合格的自动候选bean。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

如果我@autowired存储库,它就可以正常工作。

我的测试必须是这样的:

@SpringBootTest
@ActiveProfiles("core")
@ContextConfiguration(classes = { UserManagementConfig.class, UserManagementServiceConfig.class })
@UserManagementTx
@RunWith(SpringRunner.class)
public class BlogPostContentImplTest {
    @Autowired
    private CountryService countryService;
    @Autowired
    private BlogPostContentRepository blogPostContentRepository;
    private BlogPostContentServiceImpl blogPostContentService;
    private BlogPostContent entity = new BlogPostContent();
    @Before
    public void setUp() throws Exception {
        blogPostContentService = new BlogPostContentServiceImpl(blogPostContentRepository);
        List<Country> countryList = countryService.findAll(null);
        entity = new BlogPostContent();
        entity.setId(1L);
        entity.setDescription("test");
        entity.setCountry(countryList.get(0));
        blogPostContentService.insert(entity);
    }

    @After
    public void tearDown() throws Exception {
        blogPostContentService.delete(entity.getId());
    }

    @Test
    public void findAll() throws Exception {
        assertThat(blogPostContentService.findAll(null).size()).isGreaterThan(0);
    }

}

这是我配置上下文的方式:

@Configuration
@ComponentScan({
        UserManagementConfig.CONTEXT_CLASSPATH
})
public class UserManagementConfig {
    public static final String CONTEXT_CLASSPATH = "com.api.userManagement.config.context.**";
}

@Configuration
@ComponentScan({
        UserManagementServiceConfig.CLASSPATH,
})
public class UserManagementServiceConfig {

    public static final String CLASSPATH = "com.api.userManagement.service.**";

}

共有1个答案

苏鸿波
2023-03-14

根据您发布的代码,您可能需要组件扫描您的测试上下文之一(类UserManagementConfigUserManagementServiceConfig)中的com.api.core.service.countryServiceBean

@ComponentScan({
     basePackages = {"com.api.core.service"}
})

要测试应用程序上下文是否加载bean,可以创建一个TestContext类,如下所示

@Configuration
@ComponentScan(basePackages = "com.api.core.service")
public class TestContext implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(TestContext.class, args);
    }
}

在测试中配置testcontext,如下所示

@ContextConfiguration(classes = {TestContext.class})
 类似资料:
  • 问题内容: 我有一个具有字段()的Spring 类(),但是该字段是我尝试使用它时所用的。日志显示该bean和该bean都在创建,但是每当我尝试在服务bean上调用该方法时,都会得到一个a 。Spring为什么不自动接线该领域? 控制器类: 服务等级: 应该自动连接的服务bean,但不是: 当我尝试时,出现以下异常: 问题答案: 本文向大家介绍为什么我的Spring @Autowired字段为空?

  • 我正在修改我以前使用的Visitor模式。我们有基类Element,它有虚拟方法接受(Visitor),并且这个方法在继承自Element的所有类中都被重写。在任何派生类中,接受()所做的就是调用visitor- 为什么客户不能直接打电话给访客- 调用元素中有哪些有用的信息。接受(访客),然后依次呼叫访客。参观(元素)?这使得Visitor模式的使用很麻烦,并且在所有元素类的层次结构中都需要额外的

  • 问题内容: 我的应用程序中有一个弹出模式服务,名为。它只是在上翻转了一些布尔值,从而导致2条指令正确显示/隐藏。这是显示新模态时调用的函数 如您所见,我显示不透明的背景,然后设置了一个名为的变量,该变量随后通过DI传递到我的指令中。但是后来我注意到我的模态没有出现在适当的时候,而是在变量设置为true 之后出现在NEXT摘要循环中。然后,我必须添加作业周围的内容才能使其正常工作。但是,我认为仅当我

  • 本文向大家介绍为什么我们需要微服务容器?相关面试题,主要包含被问及为什么我们需要微服务容器?时的应答技巧和注意事项,需要的朋友参考一下 要管理基于微服务的应用程序,容器是最简单的选择。它帮助用户单独部署和开发。您还可以使用Docker将微服务封装到容器的镜像中。没有任何额外的依赖或工作,微服务可以使用这些元素。

  • 我试图在配置类中定义datasource和jdbctemplate bean。然而,每当我将它们自动连接到Restcontroller类时,它们都会为null。为什么? 在我的配置类中 restcontroller类内部 每次尝试编译时,我都会收到来自autowired字段的空指针异常,即使我没有手动实例化任何内容,只是让spring通过自动连线来管理所有实例。

  • 问题内容: 我将稍微解释一下我的脚本,以便您可以理解我的问题。 基本上我做了一个脚本来检查SOCKS5是还是。 当我在上面测试我的脚本时,它运行良好,但是当我在Windows上对其进行测试时,直到我将以下行添加到: 谁能向我解释为什么我在Windows中需要此行,而在Linux服务器上却不需要? 问题答案: SSL证书上的此cURL手册页介绍了连接到SSL / TLS受保护主机时 证书验证 的过程