testable-mock icon indicating copy to clipboard operation
testable-mock copied to clipboard

Testable-mock使用规范的问题

Open Saltingfish opened this issue 3 years ago • 3 comments

大佬你好: 目前,我们团队都已经使用Testable-mock并且效果也很明显,不用启动spring容器上千个单测2、3分钟就跑完了。 但现在遇到个问题难以抉择,DAO层要不要mock的问题:如果mock的话速度快了一倍,但SQL语句的正确性无法保证;如果不mock,速度又慢了。还请大佬指教。

Saltingfish avatar Apr 09 '21 10:04 Saltingfish

这个问题本身没有唯一答案,其实主要看测试的目的的做单元回归还是集成回归:

  • 对于标准的单元测试来说,当测试目标是Service或Component类的逻辑时,DAO层属于对外部依赖的调用,会导致测试慢或离线不可执行,应该通过Mock进行替换。
  • 但现实项目中还存在一种情况是使用单元测试框架进行集成测试,典型例子是使用了@SpringBootTest注解的测试用例,这种情况下实际测试的是当程序完整启动以后的端到端链路,此时为了保证链路完整性,则会在测试上层逻辑时保留DAO层的功能。

有时候这两种测试也会在一个项目里同时并存,此时若使用TestableMock就需要合理运用MOCK_CONTEXT对象,或将部分Mock方法的scope参数设置为ASSOCIATED(详见Mock的生效范围文档)。

出于测试稳定性和效率考虑,我会更推荐在非必要的情况下,都统一使用Mock的DAO层进行测试。

linfan avatar Apr 10 '21 14:04 linfan

感谢回复,还想问下后续考不考虑一个功能,对SQL语句的正确性做校验呢。例如:我要去CRUD的时候,判断语句是否正确,正确返回我要Mock的值,不正确抛相应SQL的问题,类似于H2内存数据的部分功能。

Saltingfish avatar Apr 10 '21 16:04 Saltingfish

挺好的建议,先Mark一下,作为后续版本的备选功能~

linfan avatar Apr 12 '21 09:04 linfan