博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不依赖第三方环境和服务
阅读量:6466 次
发布时间:2019-06-23

本文共 886 字,大约阅读时间需要 2 分钟。

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

单元测试的粒度

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

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

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

service层单元测试依赖消除

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

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

1240

转载于:https://www.cnblogs.com/jishujinjie/p/7294877.html

你可能感兴趣的文章
leveldb学习:DBimpl
查看>>
MySQL存储引擎--MYSIAM和INNODB引擎区别
查看>>
[Recompose] Stream Props to React Children with RxJS
查看>>
打印图片
查看>>
SHOW CREATE DATABASE Syntax
查看>>
rsync常见问题及解决办法
查看>>
AKM项目轶事之GBS同事转入GDC
查看>>
MySQL日期 专题
查看>>
C#中禁止程序多开
查看>>
分布式缓存Redis使用以及原理
查看>>
[LeetCode] Number of 1 Bits 位操作
查看>>
数据结构与算法JavaScript描述——队列
查看>>
练习二:结对练习
查看>>
JSON中JObject和JArray,JValue序列化(Linq)
查看>>
杂七杂八
查看>>
samba、nginx服务
查看>>
Activity竟然有两个onCreate方法,可别用错了
查看>>
Linux经常使用命令(十六) - whereis
查看>>
Tomcat
查看>>
插件编译 版本问题
查看>>