且听书吟

  • 首页
  • 关于
  • 留言
  • 友链
  • 笔记
  • 代码
且听书吟

Spring Boot 简介

2017-05-13

最老的方式,你可能会使用 @ContextConfiguration 注释和 SpringApplicationContextLoader 的组合去写单元测试。

当然,我们可以去掉 loader 的配置,使用方法2 的 SpringApplicationConfiguration 注解去测试

当想写一个集成测试的时候,可以使用 IntegrationTest 注解,和前面的不一样的是,前面两种方式不会初始化全部的 Bean,而 IntegrationTest 会和生产环境一样,完整初始化程序。但是它不会初始化 嵌入式的 Servlet 容器。

当你需要嵌入式的 Servlet 容器做一些接口的集成测试的时候,就需要使用 WebIntegrationTest 注解

然而一个项目,基本上包含 SpringApplication 和 main 方法的类只有一个,所以在1.4 之后,我们连 App.class 都不需要给定,直接使用 @SpringBootTest 注解即可,更加优雅。

这个就是我基于 Spring Boot 1.3 写的一个集成测试,当然它使用的是我们前面说的方法3。

前面我们其实已经说到了 Spring Boot 的 Profile 可以让我们区分不同环境下加载的配置文件。比如开发环境,测试和线上,很多值都可以实现定制,而不需要重新打包项目。

使用 Profile 的第二个场景就是不同的 Profile 需要初始化不同的bean,比如以 DataSource 为例,测试的时候,因为测试环境不一样,我们更期望 DataSource 能用 H2一类的嵌入式数据库模拟。开发和生产环境,就需要初始化一个 MySQL 的 DataSource。当然我说的这个场景不需要我们专门去配置,因为 Spring Boot 已经替我们考虑到了这种情况,在需要 DataSource,但是没有这个 Bean,切依赖了 H2的 Driver 的时候,Spring 会自动创建一个 H2 的 DataSource。

还有一个我使用 Profile的场景就是 Swagger,它十分好用,尤其是开发的时候能基于注解自动生成 API Doc,和测试页面,然而,会存在的问题就是它有漏洞,我只希望在开发的时候启用 Swagger,这个时候就可以利用 Profile 来实现。

Profile 可以启用一个或者多个,然而,也会导致一些问题,比如我们没有指定 Profile 的时候怎么办,或者我们有 profile 名为 mysql、cassadra。它们是相互 block 的,如何检查校验,避免冲突的 profile 同时启用呢?

1 2 3 4 5 6
3
评论 (1)
再想想
  • Ryan Wang

    讲得好!

    2019-12-21 回复
随机文章
  • 见与不见
  • 回首的瞬间
  • 成长的烦恼
  • 轮回,苍白了年少轻狂
  • 我是男生,不是女生
  • 琐碎
近期评论
  • 咚门发表在《中年的世界》
  • 云心怀鹤发表在《好羡慕,你还是学生》
  • I'M代代付发表在《写给十年后的自己》
  • 肉松发表在《写给十年后的自己》
  • 大雁养老发表在《写给十年后的自己》
  • rfed发表在《中年的世界》
文章标签
人生 同人 回忆 小说 影评 思考 悠久之翼 情感 成长 文字 时光 未来 杂思 梦想 爱情 童年 记忆 随想 青春 高考
订阅博客
Copyright © 2011-2023 且听书吟. Designed by nicetheme.
萌ICP备 20200318号