【发布时间】:2019-01-29 11:12:22
【问题描述】:
我正在构建一个基本的 HTTP API 和一些操作,如 POST /users 在数据库中创建一个新的用户记录。
我知道我可以模拟这些调用,但在某种程度上我想知道让我的 Junit 测试针对真实(测试)数据库运行是否更容易?这是一个不好的做法吗?是否应该只针对真实数据库运行集成测试?
我正在使用flyway 来维护我的测试架构和构建的 maven,因此我可以让它在每次构建时使用正确的架构重新创建测试数据库。但我也担心我需要一些额外的开销来维护/清理每次测试之间的数据库状态,我不确定是否有一个好的方法来做到这一点。
【问题讨论】:
-
单元测试应该在受控环境中测试您的单元(您的代码)。所以使用模拟比使用真正的数据库更好
-
严格来说,如果你去外部数据库,它不再是一个单元测试。这并不意味着它在某些(罕见)情况下没有用。
-
为什么不想使用内存中(即
H2)? -
您的单元测试不能依赖于外部系统,因为如果您的数据库出现问题,即使您的代码可能正常工作,您的测试也会失败。