在项目中,除了查询数据库,还要调用外部的服务,这这时候我们在写单元测试的时候,会考虑怎么覆盖着一块代码:

1.封装一个方法,然后mock这个方法。

2.直接配置好调用的服务,测试的时候调用真实存在的服务。

3.起一个服务,mock这个调用的这个服务。

第一种方法虽然mock了这个方法,但是没有覆盖到调用远端的这个服务处理过程,比如序列化,contentType等等。

第二种方法过于依赖已经外部的服务,测试的失败的概率也是比较高的,也有点集成的意思,会把单元测试做的过重,并且不好维护。

第三种方法,可以配置协议启动,当方法调用的时候,实际调用我们mock的服务,也想过开发一个mock服务,我们配置需要调用的服务,返回格式内容,感觉这种适合给前端接口定义的时候用,不适合后端开发。

发现前人开发了moco(https://github.com/dreamhead/moco)来实现第三种方法来做单元测试。有几种使用Moco的方法。一种是API,您可以在单元测试中使用它。另一个是独立运行Moco。当前,需要将所有配置都放在JSON文件中。

如果是maven项目,那么加入如下的依赖:

然后在junit的单元测试中,加入moco runner的服务,这里我使用作者git中的test描述,需要写一个配置文件,这里的request是请求的配置,response可以配置返回的contentType类型,比如text,json,file等常用的:

然后使用MocoJunitRunner.jsonHttpRunner(12306, "src/test/resources/foo.json")配置端口和配置文件:

这样就可以单元测试啦!

java moco_使用moco单元测试相关推荐

  1. java 单元测试用例_Java 单元测试及JUnit的使用

    Java 单元测试: 单元测试是开发者编写的一小段代码,用于检测被测代码的一个很小的.很明确的功能是否正确. 单元测试的方法: 人工静态分析:人工阅读检测代码 自动静态分析:使用代码复查工具检查 自动 ...

  2. 嘿嘿,JAVA里第一次运行单元测试成功,立存

    按书上写的单元测试. 居然一次过,爽!!! package org.smart4j.chapter2.test;import java.util.HashMap; import java.util.L ...

  3. java私有方法单元测试_如何通过java反射的方式对java私有方法进行单元测试

    待测试的私有方法: import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.ann ...

  4. java day25【Junit单元测试 、反射 、 注解】

    第一章  Junit单元测试: * 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. * Junit使用:白盒测 ...

  5. Spock in Java 慢慢爱上写单元测试

    前言 最近小组里面引进了Spock这个测试框架,本人在实际使用了之后,体验非常不错,本篇文章一是为了巩固输入的知识,二是为了向大家推广一下. 在了解学习Spock测试框架之前,我们应该先关注单元测试本 ...

  6. Java求解一元二次方程+单元测试(IDEA+Junit)

    介绍 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 1.安装JUnit插件步骤 File–>settings–>Plguins–>Browse rep ...

  7. Uber:Java中的不稳定单元测试处理

    Flaky Tests介绍 单元测试是任何持续集成(CI)系统的基石.在合并之前,它向软件工程师警告新实施的代码的错误和现有代码的回归.这在软件开发生命周期的早期就能发现bug,从而确保提高软件的可靠 ...

  8. Java开发手册之单元测试,还没搞懂JVM

    正例:为了不受外界环境影响,要求设计代码时就把SUT的依赖改成注入,在测试时用spring 这样的DI框架注入一个本地(内存)实现或者Mock实现. [强制]对于单元测试,要保证测试粒度足够小,有助于 ...

  9. 阿里巴巴java开发编码规范——单元测试

    目录 强制 推荐 参考 强制 1.好的单元测试必须遵守AIR原则.A:Automatic(自动化),I:Independent(独立性),R:Repeatable(可重复) 2.单元测试应该是全自动执 ...

最新文章

  1. 如何使div填充剩余的水平空间?
  2. 两个等号(==)和三个等号(===)的区别
  3. 【Python】简单而不简约:一份Python小抄奉上
  4. 1.进程间的关系:终端,网络设备
  5. Unity基础之:UnityAPI的学习
  6. 【免费活动】字节跳动背后的音视频技术揭秘
  7. On Tutorial with Caffe--a Hands DIY DL for Vision
  8. Python基于用户协同过滤算法的电影推荐代码demo
  9. TOJ 2353: Billiard
  10. jquery中css()与animate()
  11. 清理谷歌浏览器注册表_【从注册表解决谷歌浏览器主页被篡改】注册表被篡改_谷歌浏览器被360篡改...
  12. 36-基于51单片机的LED彩灯控制器设计
  13. LANP+KEEPALIVED集群(三)
  14. linux ogv格式转换,使用OGV转换将OGV转换为Linux中的AVI | MOS86
  15. win10升级助手_不想使用一键重装软件?微软win10升级助手来了
  16. 如何通过KRPano全景资源下载助手来批量下载720yun的全景图
  17. unity lookat导致物体颠倒怎么解决_在Unity 2D中如何用一行代码实现LookAt的效果,以及向量归一化小总结...
  18. 7-4 输出两行短句 (10分)
  19. 常见游戏运行错误代码,解决教程!
  20. python壁纸高清图片_详解Python静态网页爬取获取高清壁纸

热门文章

  1. 【U8+】登录客户端未能加载文件或程序集
  2. android 刘海适配
  3. JAVA的palette_Palette 的使用
  4. 大数据技术之Hive实战——Youtube项目(二)
  5. 距离6月18日DAMA-CDGA/CDGP认证考试还有31天,报名从速
  6. java中contextpath是什么,你如何从JavaScript获得contextPath,正确的方式?
  7. mysql密码忘了咋办,密码重置过程
  8. 二叉树全分析(超详细总结建议收藏)
  9. 专访:《日企员工日语读本》赵大生教授
  10. chapter.外部数据读取和存储1.3