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

@webmvctest不排除和加载标记为@repository的bean

卫仲卿
2023-03-14

我有一个@RestController,它在字段@autowire中只有一个依赖项,该依赖项是@component,该组件类定义有一些autowired字段是@service,这些服务有一些@repositories。

在整个流程中,我有kafka、Quartz、Cassandra和DB2,所以当我为控制器创建单元测试用例时,我不想设置整个应用程序。所以我决定使用@webmvctest,并在controller类的唯一一个依赖项上使用@mockbean。

但是我的测试是抛出和异常,因为它试图创建一个标记为@repository的Dao bean。

@ActiveProfiles("test")
@WebMvcTest(controllers = MyControllerTest .class)
class MyControllerTest {

    @MockBean
    MyControllerDependency dependency;

    @Autowired
    MockMvc mockMvc;

    @Test
    void test_something() throws Exception {
       assert(true);
    }
}

下面是代码的过度简化版本

@Component
class MyControllerDependency { 
    @AutoiWired
    MyCustomService service;
}

@Service
class MyCustomService{

   @Autowired
   MyCustomDao dao;
}

@Repository
class MyCustomDao{
    @Autowired
    private JdbcTemplate template;
}
Exception

***************************
APPLICATION FAILED TO START
***************************

Description:

Field template in com.....MyCustomDao`  required a bean of type 'org.springframework.jdbc.core.JdbcTemplate' that could not be found.

共有1个答案

史昱
2023-03-14

当您在spring boot主应用程序类上有显式的@ComponentScan注释时,通常会发生这种情况。

@ComponentScan批注禁止使用@WebMVCTest使用的默认组件扫描机制,在该机制中,它向上扫描包层次结构,并应用excludeFilters仅查找controller及其相关类。

 类似资料:
  • 我正在使用Mapbox,在我的本地主机中,它总是正确加载我的标记。然而,现在我部署了我的应用程序,它没有。 至少有时候, 我注意到,如果我加载页面,然后就在页面加载之前,我切换到另一个选项卡,然后等待5秒钟,然后回到我的应用所在的选项卡。它确实工作并加载标记。 此外,我得到的错误:当我试图设置一个功能状态(当你悬停在侧边栏项目上,在标记没有加载的情况下): 我还注意到在标记未加载时不触发,因为如果

  • 我正在尝试将一个项目从gwt-2.6.1迁移到gwt-2.7。但是,我遇到了一个问题。在一个继承的模块中,由于某种原因,gwt编译器忽略了gwt.xml。所以我有这样的东西。gwt.xml: 但是在使用带有gwt-maven-plugin的maven编译时,我一直收到这样的错误: 如您所见,gwt尝试在servlet目录中编译一个文件,该文件在中被排除。gwt。xml。原因可能是什么?gwt-2.

  • 下面的HTML代码需要xpath 仅供参考:xpath将具有排除邮政编码的div text(),以便返回剩余的div和span文本。有时postalCode不在这个div标记中。因此,如果它存在,跳过它,如果不返回整个div标记文本。

  • controller.java UserServiceImpl.java 我得到了这个错误 应用程序启动失败 描述: 我使用的SpringBoot版本:2.1.0.发行版

  • 试图刮此网站网址使用urllib2,机械化和美丽汤。当通过浏览器呈现并使用FireBug查看时,我们可以看到带有类progress__supporters和progress_goal的div标签,如下所示。 但是当我们使用urllib2时。打开/mechanize/selenium以查看网页,这些标签不可用。下面是示例代码 我们使用上述代码获得以下输出。 一个原因可能是因为类为“progress\

  • 我使用JSoup解析字符串,其中包含超文本标记语言标记为纯文本。例如: 它可以很好地解析它,但问题是我的Java字符串是否包含