像是 java Mockito 会直接定义id=3,回传user id=3,name=mock 3的bean
Mockito.when(userDao.getUserById(3)).thenReturn(new User(3, "mock 3"));
只需要在之后 equal 验证是否id=3,name=mock 3 就好,因為是預設好的假資料,等于直接把结果写好,所以一定会验证OK
但跟我们公司做法不一样 , 我们会在本机安装 docker 建立 sql server 跟 mysql、pgsql
并类似开源专案 dapper使用"建立临时表"方式建立测试资料来做验证
另外 pull reqeust 时会在 CI 建立 docker + 建立数据库再做一次验证
公司前辈说法 : 这样比起纯 bean 更能验证各数据库的SQL是否正确
看你们要测的层到底是哪个.
如果是非数据层比如 Service,那直接 Mock 就好,因为这里不操心数据库,甚至都不用知道数据库的存在(你后面挂的存储是数据库还是 redis 还是个文本对这一层而言都无所谓).
如果是数据层比如 Repository 、DAO 等等, 上这一套方法是可以的,这里开始关心数据库的存在.
CI 集成时是全部测试都要跑一遍那按规范制度来就行;至于本机上,其实多数时候只是关心 SQL 结构、跑一些语句的问题,那么有几种办法:
SpringPhysicalNamingStrategy
给每个人的表名后面加个后缀,配个 update 策略随应用结束自动删表就行. ( Spring Boot 测试环境的配置是可以独立的