testable-mock
testable-mock copied to clipboard
Testable-mock使用规范的问题
大佬你好: 目前,我们团队都已经使用Testable-mock并且效果也很明显,不用启动spring容器上千个单测2、3分钟就跑完了。 但现在遇到个问题难以抉择,DAO层要不要mock的问题:如果mock的话速度快了一倍,但SQL语句的正确性无法保证;如果不mock,速度又慢了。还请大佬指教。
这个问题本身没有唯一答案,其实主要看测试的目的的做单元回归还是集成回归:
- 对于标准的单元测试来说,当测试目标是Service或Component类的逻辑时,DAO层属于对外部依赖的调用,会导致测试慢或离线不可执行,应该通过Mock进行替换。
- 但现实项目中还存在一种情况是使用单元测试框架进行集成测试,典型例子是使用了
@SpringBootTest
注解的测试用例,这种情况下实际测试的是当程序完整启动以后的端到端链路,此时为了保证链路完整性,则会在测试上层逻辑时保留DAO层的功能。
有时候这两种测试也会在一个项目里同时并存,此时若使用TestableMock
就需要合理运用MOCK_CONTEXT
对象,或将部分Mock方法的scope
参数设置为ASSOCIATED
(详见Mock的生效范围文档)。
出于测试稳定性和效率考虑,我会更推荐在非必要的情况下,都统一使用Mock的DAO层进行测试。
感谢回复,还想问下后续考不考虑一个功能,对SQL语句的正确性做校验呢。例如:我要去CRUD的时候,判断语句是否正确,正确返回我要Mock的值,不正确抛相应SQL的问题,类似于H2内存数据的部分功能。
挺好的建议,先Mark一下,作为后续版本的备选功能~