不依赖第三方环境和服务

前端之家收集整理的这篇文章主要介绍了不依赖第三方环境和服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一切依赖于第三方环境和服务的测试都不能叫做单元测试

单元测试的粒度

单元测试的是围绕着一个单点的功能来展开的,如果加入其他依赖因素,就会对单元测试的结果造成干扰,所以单元测试一定要把依赖因素给排除掉。

如何消除依赖
  1. 组件本地化实现
    这种情况常见于数据库和中间件的依赖。比如dao层单元测试,要验证MysqLsql语句的执行情况,那就不能直接使用测试环境的数据库来作为单测的基础设施,毕竟测试环境容易有垃圾数据、环境不稳定等情况会影响测试的结果。这时候就要借助一些本地的数据库实现,比如h2内存数据库支持标准 sql,JDBC API,性能优良的数据库引擎,这样在测试中引入h2就可以消除对测试环境的依赖,而且测试用例的执行速度更快。
    其他比如mongodb、kafka、mq等的单元测试与之类似,都是要采用本地化的实现。
  2. 模拟依赖服务
    就是利用一些mock框架,模拟服务的行为和数据,单测的粒度决定我们只关心某一点,至于依赖的服务如何,要在集成测试里去测,故mock依赖的情况下默认所依赖的服务都是没有问题的,只关心被测试代码的逻辑。
    mock其实就是创建一个模拟的对象,来代替真实的对象,这样我们就可以指定mock对象的行为,比如返回什么样的数据,执行什么样的动作,也可以验证mock对应的某个方法有没有调用调用了多少次等。
dao层单元测试依赖消除

dao层无外乎就是增删改查,既要验证操作能否正常执行,也要验证数据是否符合预期,所以这一层的测试不能使用mock,否则无法达到单测的目的,没有意义。dao层的测试依赖要采用组件本地化的形式实现,比如用h2内存数据库来代替实际上测试环境中的MysqL

service层单元测试依赖消除

service层的依赖适宜使用mock框架,来模拟所依赖服务的行为和数据。比如某个服务依赖于用户中心的用户信息接口,那我们就可以模拟该接口的返回数据来验证不同场景的逻辑。

更多内容欢迎关注个人微信公众号,一起成长!

猜你在找的设计模式相关文章