大家在做单元测试的时候如何准备数据库环境?
例如说需要测试一个删除功能,大家是在测试方法的开头插入一条记录以供删除吗?还是什么其他方法?
还有一种情况是,例如一个电商系统,想测删除 SKU 接口,准备数据的时候就得先准备产品,然后再准备 SKU,大家是如何准备的?
例如说需要测试一个删除功能,大家是在测试方法的开头插入一条记录以供删除吗?还是什么其他方法?
还有一种情况是,例如一个电商系统,想测删除 SKU 接口,准备数据的时候就得先准备产品,然后再准备 SKU,大家是如何准备的?
这也是我一直很纠结单元测试的原因之一.
后来自己折腾出了一套 functional 测试工具, 数据准备与清理工作也不成问题了. 有兴趣的同学可以参考一下这里:
https://gitee.com/actframework/act-doc/blob/master/cn/test.md#-82-%E5%87%86%E5%A4%87%E6%B8%85%E7%90%86%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE
写 Java 测试离不开 JUnit。在 Spring 下写测试比较简单些,Spring 自身带的测试工具很全。
https://github.com/hantsy/building-restful-apis-with-springmvc-gitbook/blob/master/testing.md (比较老了一点)
Spring Boot 1.4 中增加了大量工具简化测试: https://github.com/hantsy/building-restful-apis-with-springmvc-gitbook/blob/master/boot-1.4.md
数据库相关的单元测试可以 Mock 相应的操作(比如 Mock JpaRepsoitory ),集成测试时也需要创建数据库,初始化数据为测试准备,Spring Boot 可以使用嵌入式数据库代替(不用清理数据)。
Java EE 的测试参考:
Java EE 6: https://github.com/hantsy/signup-app/tree/master/src/test/java/org/company/test
Java EE 7: https://github.com/hantsy/ee7-jaxrs-sample/tree/master/vanilla/src/test/java/com/hantsylab/example/ee7/blog
Java EE 8: https://github.com/hantsy/javaee8-jaxrs-sample/tree/master/backend/src/test/java/com/github/hantsy/ee8sample/rest
上面说 mock 的, 主就是要测数据库。