前言
作为一个Java开发,我相信大家或多或少都写过单元测试,特别是SpringBoot项目,它的test组件提供了大量的功能来帮助我们高效的完成单元测试。 这个系列我会分几个部分,通过实际的单元测试中遇到的问题场景,来分享一下如何利用SpringBootTest来快速实现或解决对应的单元测试需求及问题。
配置隔离
我们在进行单元测试时,特别是在本机运行时,经常会有这样的场景:单元测试的配置中的部分特定项需要和正式的配置区分(正式的配置是指发布到服务器上的配置,不管是开发、测试还是生产环境),比较常见的比如端口、文件目录信息等等和环境相关的配置。
这种情况我们一般怎么处理? 可能很多人都是把正式配置copy一份,然后把其中的特定项改为测试所需要的配置,用于单元测试,比如:
@ContextConfiguration("/test-config.properties") class ApplicationContextTests { // do something }
这样在大部分场景下确实可以,但是还是存在问题,比如项目使用了配置中心怎么办,程序会使用配置中心的配置;还有如果正式配置变更了,我都要同步的来修改test-config.properties
,非常麻烦。
覆盖配置
@TestPropertySource
Spring帮我们考虑到了这些情况,我们可以直接通过覆盖PropertySource来解决:
/** * 指定配置文件 */ @ContextConfiguration @TestPropertySource("/