Spring 编程常见错误 50 例
傅健
Cisco 高级软件工程师、Netty 源码贡献者
17065 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
结束语 (1讲)
期末测试 (1讲)
Spring 编程常见错误 50 例
15
15
1.0x
00:00/00:00
登录|注册

22 | Spring Test 常见错误

你好,我是傅健。
前面我们介绍了许多 Spring 常用知识点上的常见应用错误。当然或许这些所谓的常用,你仍然没有使用,例如对于 Spring Data 的使用,有的项目确实用不到。那么这一讲,我们聊聊 Spring Test,相信你肯定绕不开对它的使用,除非你不使用 Spring 来开发程序,或者你使用了 Spring 但是你不写测试。但话说回来,后者的情况就算你想如此,你的老板也不会同意吧。
那么在 Spring Test 的应用上,有哪些常见错误呢?这里我给你梳理了两个典型,闲话少叙,我们直接进入这一讲的学习。

案例 1:资源文件扫描不到

首先,我们来写一个 HelloWorld 版的 Spring Boot 程序以做测试备用。
先来定义一个 Controller:
@RestController
public class HelloController {
@Autowired
HelloWorldService helloWorldService;
@RequestMapping(path = "hi", method = RequestMethod.GET)
public String hi() throws Exception{
return helloWorldService.toString() ;
};
}
当访问 http://localhost:8080/hi 时,上述接口会打印自动注入的 HelloWorldService 类型的 Bean。而对于这个 Bean 的定义,我们这里使用配置文件的方式进行。
定义 HelloWorldService,具体到 HelloWorldService 的实现并非本讲的重点,所以我们可以简单实现如下:
public class HelloWorldService {
}
定义一个 spring.xml,在这个 XML 中定义 HelloWorldService 的 Bean,并把这个 spring.xml 文件放置在 /src/main/resources 中:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Spring Test 常见错误 本文深入分析了在 Spring Test 中常见的两个错误案例。首先介绍了关于资源文件扫描不到的问题,通过一个 HelloWorld 版的 Spring Boot 程序进行测试,发现在测试中无法加载 spring.xml 文件,导致测试失败。作者提出了两种修正方式,一是在加载目录上放置 spring.xml,二是在 @ImportResource 使用classpath加载方式。其次,文章讨论了关于 Mock 的错误,发现 Spring Context 被多次启动,导致测试运行缓慢。通过分析发现,根源在于使用了 @MockBean 导致 MergedContextConfiguration 不同,从而导致 Context 不能被复用。作者提出了修正方案,包括手工实现类似功能的 Mockito 方法或将相关的 MockBean 定义到一个统一的地方。总结指出,在使用 Spring Test 时需要注意资源文件的加载方式和 @MockBean 可能导致的 Spring Context 反复新建问题。最后,文章强调了重点,提醒读者注意在使用 @ImportResource 时避免使用绝对路径指定资源,并建议注意加速测试的方法。整体而言,本文通过具体案例深入分析了 Spring Test 中常见错误,并提供了解决问题的思路和方法,对于使用 Spring Test 进行开发的技术人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring 编程常见错误 50 例》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • Ethan New
    把依赖 Mock 的 Bean 声明在一个统一的地方,这种方式也太不方便了
    2023-01-03归属地:浙江
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部