Spring Boot单元测试实践

345 阅读1分钟

敏捷开发里有保障代码质量的两个重要技术,一个是代码重构,另一个是单元测试。单元测试之所以重要,是因为在单元测试的加持下,可以降低回归测试的难度以及提高开发人员的信心。

前提条件

  1. 业务代码必须对单元测试友好。
  2. 单元测试必须尽量避免依赖外部服务。

Spring上下文

因为应用依赖的自动配置通常会用到很多外部服务,所以通过 XML 方式配置 Spring 上下文。

springContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- 配置自动扫描的包 -->
    <context:component-scan base-package="xxxx">
    </context:component-scan>

    <!-- TODO 配置依赖的bean -->
</beans>

编写单元测试代码

@Transactional(rollbackFor = Exception.class)
@ContextConfiguration(locations = "classpath:/xxxx/springContext.xml")
public class BeanTestContext {

}

@RunWith(SpringRunner.class)
public class XXXXTest extends BeanTestContext {

    @Test
    public void test() {
        // TODO
    }

}

数据库测试数据

可以通过 Liquibase 初始测试数据到单元测试专用的数据库,其中 TestDataTaskChange 是用来加载测试数据的自定义类,相关实现可以参考开源项目 MoLiHua 的 jasmine-framework-test 模块。

图片.png

图片.png

实践经验

  • 设计的单元测试框架必须对开发人员简便。
  • 单元测试用例跟源代码一样都需要持续维护。

参考代码

可以参考开源项目 MoLiHua 的单元测试方案。