使用 @WebMvcTest 的测试切片正在加载大量与目标无关的控制器

2024-04-16

我有一个 Spring Boot 应用程序,可生成大量控制器,我的目标是为特定控制器创建集成测试。我读到我们可以用以下方法实现测试切片@WebMvcTest仅加载部署目标控制器所需的注释,这个假设正确吗?这是我的测试:

@RunWith(SpringRunner.class)
@WebMvcTest(
        controllers = {DummyController.class},
)
public class DummyControllerIT {

    @Autowired
    private MockMvc mockMvc;

...

不幸的是,执行尝试部署与目标控制器无关的其他控制器/服务/存储库,这迫使我使用@MockBean在他们每个人身上。我的印象是@WebMvcTest将使我不必拥有声明的控制器/服务/存储库的广泛列表@MockBean注解,我错了吗?

如果我误解了这一点并且我应该使用@MockBean在应用程序的不相关部分,然后为什么更好 to use @WebMvcTest代替@SpringBootTest?另一方面,如果我解释正确的话我错过了什么?


不确定它是否相关,但这是我的初始化程序:

@ComponentScan(scopedProxy = ScopedProxyMode.INTERFACES)
@SpringBootApplication
@EnableTransactionManagement
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableScheduling
@EnableCaching
@EnableJpaAuditing
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
public class Application extends SpringBootServletInitializer {

    @Autowired
    private Environment env;

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    @Bean
    @Primary
    public TaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(Integer.parseInt(Objects.requireNonNull(env.getProperty("coreThreadPoolSize"))));
        executor.setMaxPoolSize(Integer.parseInt(Objects.requireNonNull(env.getProperty("maxThreadPoolSize"))));
        executor.initialize();
        return executor;
    }

}

感谢您的帮助。


@WebMvcTest其工作原理是禁用应用程序的完全自动配置,并过滤其组件扫描,以便仅配置所需的部分。你的主要课程,Application,正在启用自动配置(通过@SpringBootApplication),但也明确启用组件扫描以及缓存、安全性、JPA 存储库等。@WebMvcTest不会关闭这些显式启用的部分,因此您不得不模拟事物。

这个问题以及避免它的推荐方法是参考文档中描述 https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/htmlsingle/#boot-features-testing-spring-boot-applications-testing-user-configuration。简而言之,您应该移动各种@Enable…注释来分隔@Configuration通过组件扫描拾取的类。您可能还想查看其中一些的必要性。例如,@EnableTransactionManagement被自动配置覆盖。

您的使用@ComponentScan也有问题,因为它关闭了过滤@WebMvcTest需要。将其移离@SpringBootApplication- 带注释的类应该解决这部分问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 @WebMvcTest 的测试切片正在加载大量与目标无关的控制器 的相关文章

随机推荐

  • 链接器错误已定义

    我正在制作一个nodejs插件 我的 Visual Studio 项目中有 5 个文件 comm h cc node main cc util h cc 我将它与图书馆链接node lib node main cc有一个功能 v8 Hand
  • 如何将 SSL 证书添加到 Bluemix java Cloud Foundry 应用程序?

    我正在使用 Spring Boot Java JDK 1 8 Java MongoDB 驱动程序和 MongoDB 开发微服务 我已经在 Bluemix 上创建了 MongoDB 实例 并且正在从 Java 微服务连接到该实例 Bluemi
  • 根据可能不存在于所有值上的分隔符将 pandas 列分成两部分

    我的数据框的一列看起来像这样 application blah 3 14 xyz 5 2 abc 代表软件 版本 我正在努力实现这样的目标 application name ver blah 3 14 blah 3 14 xyz 5 2 x
  • FormBorderStyle为NONE时的表单高度问题

    我有一个无边框表单 FormBorderStyle None 高度为23像素 在设计器中设置 当 NET 在运行时绘制我的表单时 它会绘制它38像素高 由于某种原因它增加了标题栏的高度 MessageBox Show this Height
  • 如何从意图中获取额外的日期?

    我正在打包一个意图 我添加的附加项之一是日期对象 如下所示 intent putExtra DATE EXTRA t getDate 后来 当我阅读附加内容时 我尝试像这样获取日期 this date new Date intent get
  • 修改 Spark RDD foreach 内的集合

    我试图在迭代 RDD 的元素时向映射添加元素 我没有收到任何错误 但修改没有发生 直接添加或迭代其他集合一切正常 scala gt val myMap new collection mutable HashMap String String
  • 将数据库名称设置为 SQL 中的变量

    目前 我正在根据一些业务规则在一个数据库到另一个数据库之间进行一些数据迁移 我正在编写这个巨大的脚本 其中多次引用这两个数据库 问题是这种数据迁移目前正在开发中 在某些时候我将需要在生产中使用两个不同的数据库来完成它 而不是像这样直接引用数
  • 如何制作带有圆角的 tkinter 画布矩形?

    我想创建一个带圆角的矩形 我正在使用 tkinter 的画布 为托比亚斯的方法提供另一种方法确实是用一个多边形来实现 如果您担心优化 或者不必担心引用单个对象的标签系统 那么这将具有成为一个画布对象的优点 该代码有点长 但非常基本 因为它只
  • Android webview:像浏览器一样下载文件

    我正在开发一个 Android 应用程序 其 webview 指向另一个团队的动态网站 当我下载文件时 主要是动态重定向PDF 和 ZIP 我得到的只是下载文件夹中的一个文件 其中包含一些 HTML 代码 其中包含诸如 用户不允许读取该文件
  • [fn] 与 [(fn, u8)] 之间的 Rust 差异

    为什么会这样编译 fn main let xs 1 2 3 but 才不是 fn main let xs 1 1 2 2 3 3 编辑 要明确的是 问题不是为什么它不编译 It is 这两个之间有什么区别 第一个可以编译 但第二个却不能 第
  • GCC“人工”函数属性的用例

    我刚刚读到 GCC 函数属性artificial但不太明白描述 你能给我一些有用的例子吗 另一个答案没有错 但也许我可以解释得更好一些 想象一下这个函数foo c 带有行号 10 static inline int foo struct q
  • Google Guava:如何使用 ImmutableSortedMap.naturalOrder?

    我正在使用 Google Guava r08 和 JDK 1 6 0 23 我想创建一个ImmutableSortedMap使用构建器 我知道我可以像这样创建构建器 ImmutableSortedMap Builder
  • authlib OAuth 客户端与 Flask 应用程序一起使用的更好示例?

    我已经在我的 Flask 应用程序中使用了密码和代码授予流程 但这一切都感觉有点笨拙 我发现使用fetch token and update token在 oauth register 中处理令牌超时非常令人困惑 并且我没有找到错误处理的示
  • PagedList 和异步

    我在视图中使用 PagedList 但我的脚手架控制器是使用这种默认索引操作生成的 public async Task
  • 如何从jar文件访问资源文件[重复]

    这个问题在这里已经有答案了 我读过很多类似的帖子 但我找不到解决我的问题的方法 我需要验证和解析 xml 文件 针对 xsd 架构进行验证 问题是 在我的方法中 当我运行 mvn package 然后运行 jar 文件时 出现以下错误 ja
  • 无法在 Windows 10 上连接到 Jekyll 的 localhost:4000

    我正在尝试在 Windows 10 计算机上设置 Jekyll 但无法连接到由以下人员创建的网站 127 0 0 1 4000 jekyll serve or bundle exec jekyll serve 我已遵循 Julian Thi
  • 提高网络速度并连接到 Node.js 服务器时出现意外行为

    我有一个简单的 Node js 服务器 例如 var app require express var compression require compression app use compression app get function
  • 如何降级我在cmd上拥有的nuget版本?

    我错误地使用 nuget update self 在cmd上升级nuget 自动升级到V3 5 并且我想将其降级到旧版本 2 8 6 与当前生产版本相同 如何降级 卸载 nuget 然后安装旧版本 我搜索了降级 nuget 卸载 nuget
  • d3.js Insert() 函数添加子元素 - 而不是兄弟元素

    看起来当我使用 插入 功能时 新元素总是作为子元素插入 而不是作为sibling 我仍然不明白为什么会这样 因为插入函数实际上应该在指定元素之前插入一个新元素 而不是in将指定元素作为子元素 基本上我试图在 文本 元素旁边创建一个 矩形 元
  • 使用 @WebMvcTest 的测试切片正在加载大量与目标无关的控制器

    我有一个 Spring Boot 应用程序 可生成大量控制器 我的目标是为特定控制器创建集成测试 我读到我们可以用以下方法实现测试切片 WebMvcTest仅加载部署目标控制器所需的注释 这个假设正确吗 这是我的测试 RunWith Spr