用wiremock 代理代理返回201是什么回事

Mock.js实现的功能
基于 数据模板 生成数据
基于 HTML模板 生成数据
拦截并模拟 Ajax请求
&!-- (必选)加载 Mock --&
&script src="/dist/mock.js"&&/script&
// 使用 Mock
var data = /a/Mock.mock({'list|1-10': [{
'id|+1': 1
$('&pre&').text(JSON.stringify(data, null, 4))
.appendTo('body')
配置模拟数据:
Mock.mock('http://g.cn', {
: '@name',
'age|1-100': 100,
: '@color'
发送Ajax请求:
url: 'http://g.cn',
dataType:'json'
}).done(function(data, status, xhr){
console.log(
JSON.stringify(data, null, 4)
返回数据:
"name": "Elizabeth Hall",
"age": 91,
"color": "#0e64ea"
"name": "Michael Taylor",
"age": 61,
"color": "#081086"
npm install mockjs
var Mock = require('mockjs');
var data = /a/Mock.mock({'list|1-10': [{
'id|+1': 1
console.log(JSON.stringify(data, null, 4))
Angular.js:
&!-- 引用 --&
&script src="/dist/mock-min.js"&&/script&
&script src="http://cdn.staticfile.org/angular.js/1.3.0-beta.13/angular.min.js"&&/script&
&!-- 兼容angular (mock.js默认不兼容angular,需额外引用兼容包)--&
&script src="/a/src/mock.angular.js"&&/script&
&!-- 模拟数据 --&
&script src="/a/mockData.js"&&/script&
&!-- 使用 --&
(function() {
(function() {
app = angular.module('app', []);
//使用mockjax方法覆盖Ajax请求
Mock.mockjax(app);
return app.controller('appCtrl', function($scope, $http) {
box = $scope.box = [];
$scope.get = function() {
method: 'POST',
params: {a: 1},
}).success(function(data) {
return box.push(data);
}).success(function(data) {
console.log(data);
return $scope.get();
}).call(this);
mock数据mockData.js:
Mock.mock('', {
'name': '@name()',
'age|1-100': 100,
'color': '@color'
Mock.js 的语法规范包括两部分:
数据模板定义(Data Temaplte Definition,DTD)
数据占位符定义(Data Placeholder Definition,DPD)
数据模板定义 DTD
数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:
// 生成规则 rule
'name|rule': value
属性名 和 生成规则 之间用 | 分隔。
生成规则 是可选的。
生成规则 有 7 种格式:
'name|min-max': value
'name|count': value
'name|min-max.dmin-dmax': value
'name|min-max.dcount': value
'name|count.dmin-dmax': value
'name|count.dcount': value
'name|+step': value
生成规则 的 含义 需要依赖 属性值 才能确定。
属性值 中可以含有 @占位符。
属性值 还指定了最终值的初始值和类型。
生成规则和示例:
1. 属性值是 String
'name|min-max': 'value' 通过重复 'value' 生成一个字符串,重复次数大于等于 min,小于等于 max。
'name|count': 'value' 通过重复 'value' 生成一个字符串,重复次数等于 count。
2. 属性值是数字 Number
'name|+1': 100 属性值自动加 1,初始值为 100
'name|1-100': 100 生成一个大于等于 1、小于等于 100 的整数,属性值 100 只用来确定类型。
'name|1-100.1-10': 100 生成一个浮点数,整数部分大于等于 1、小于等于 100,小数部分保留 1 到 10 位。
'number1|1-100.1-10': 1,
'number2|123.1-10': 1,
'number3|123.3': 1,
'number4|123.10': 1.123
"number1": 12.92,
"number2": 123.51,
"number3": 123.777,
"number4": 123.
3. 属性值是布尔型 Boolean
'name|1': value 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率是 1/2。
'name|min-max': value 随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)。
4. 属性值是对象 Object
'name|min-max': {} 从属性值 {} 中随机选取 min 到 max 个属性。
'name|count': {} 从属性值 {} 中随机选取 count 个属性。
5. 属性值是数组 Array
'name|1': [{}, {} ...] 从属性值 [{}, {} ...] 中随机选取 1 个,作为最终值。
'name|min-max': [{}, {} ...] 通过重复属性值 [{}, {} ...] 生成一个新数组,重复次数大于等于 min,小于等于 max。
'name|count': [{}, {} ...] 通过重复属性值 [{}, {} ...] 生成一个新数组,重复次数为 count。
6. 属性值是数组 Function
'name': function(){} 执行函数 function(){},取其返回值作为最终的属性值,上下文为 'name' 所在的对象。
数据占位符定义 DPD
占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。占位符 的格式为:
@占位符(参数 [, 参数])
用 @ 来标识其后的字符串是 占位符。
占位符 引用的是 Mock.Random 中的方法。
通过 Mock.Random.extend() 来扩展自定义占位符。
占位符 也可以引用 数据模板 中的属性。
占位符 会优先引用 数据模板 中的属性
first: '@FIRST',
middle: '@FIRST',
last: '@LAST',
full: '@first @middle @last'
"first": "Charles",
"middle": "Brenda",
"last": "Lopez",
"full": "Charles Brenda Lopez"
Mock.mock( rurl?, rtype?, template|function(options) )
根据数据模板生成模拟数据。
参数的含义和默认值如下所示:
参数 rurl:可选。表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如 /\/domain\/list.json/、'/domian/list.json'。
参数 rtype:可选。表示需要拦截的 Ajax 请求类型。例如 GET、POST、PUT、DELETE 等。
参数 template:可选。表示数据模板,可以是对象或字符串。例如 { 'data|1-10':[{}] }、'@EMAIL'。
参数 function(options):可选。表示用于生成响应数据的函数。
参数 options:指向本次请求的 Ajax 选项集。
Mock.mockjax(library)
覆盖(拦截) Ajax 请求,目前内置支持 jQuery、Zepto、KISSY。
Mock.Random
Mock.Random 是一个工具类,用于生成各种随机数据。Mock.Random 的方法在数据模板中称为“占位符”,引用格式为 @占位符(参数 [, 参数]) 。
Mock.tpl(input, options, helpers, partials)
基于 Handlebars、Mustache 的 HTML 模板生成模拟数据。
方法使用详情请参考苹果/安卓/wp
积分 882, 距离下一级还需 493 积分
权限: 自定义头衔, 签名中使用图片, 隐身
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发下一级可获得
权限: 设置帖子权限道具: 提升卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 29 天连续签到: 1 天[LV.4]偶尔看看III
如题CFA三级考试近14年mock&sample
本资料来自于“高顿网校”
2015CFA三级考试notes(可复制粘贴文本)& && && &&&
支持楼主:、
购买后,论坛将奖励 10 元论坛资金给楼主,以表示您对TA发好贴的支持
载入中......
20:39:30 上传
售价: 20 个论坛币
总评分:&经验 + 40&
CFA三级2017.6群
注会CPA精英群
无限扩大经管职场人脉圈!每天抽选10位免费名额,现在就扫& 论坛VIP& 贵宾会员& 可免费加入
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
论坛法律顾问:王进律师Spring中如何使用Mockito做单元测试
但是在服务层和持久层,如果是使用注解注入的方式来设计的话,用Mock来替换真实的注入类就很麻烦了,还好我们有Mockito框架。但一段代码,你会发现它比easyMock好用多了
@RunWith(SpringJUnit4ClassRunner.class) &
@ContextConfiguration(locations = { &classpath*:application-context-test.xml& }) &
public class RouteServiceTestCase{ &
& &@InjectMocks &
& &@Autowired &
& &private IRouteS &
& &@Mock &
& &private IRouteMatrixDataP &
& &@Before &
& &public void myBefore() { &
& & & &MockitoAnnotations.initMocks(this); &
& &@Test &
& &public void testGetAirlineCode() { &
& & & &RouteMatrix rm = new RouteMatrix(); &
& & & &rm.setAirlineCode(&kkk&); &
& & & &Mockito.when(this.provider.getRevenueRoute(&HKG&, &AMM&, true)).thenReturn(rm); &
& & & &String code = this.service.getAirlineCode(&HKG&, &AMM&, this.brand, this.cInfo, true); &
& & & &Assert.assertNotNull(code); &
& & & &Assert.assertEquals(&kkk&, code); &
& & & &code = this.service.getAirlineCode(&HKG&, &KKK&, this.brand, this.cInfo, true); &
& & & &Assert.assertNull(code); &
& &@Test &
& &public void testGetAirlineCode2() { &
& & & &String code = this.service.getAirlineCode(&HKG&, &AMM&, this.brand, this.cInfo, true); &
& & & &Assert.assertNotNull(code); &
& & & &Assert.assertEquals(&kkk&, code); &
@Autowired
private IRouteMatrixDataP
service 被标记了 @InjectMocks , 在 myBefore方法中 执行 MockitoAnnotations.initMocks(this); 的时候,会将标记了 @Mock 或 @Spy 的属性注入到 service 中。
如果是 @Mock, 那就是通常的方式,service里面的provider完全被Mock实例替换,所有的调用都是针对Mock生成类的。
如果是 @Autowired 加 @Spy , 那么对于定制了返回值的会调用 Mock实例,否则会调用真实注入的属性,但是这里有一个限制,如果是代理类会报错,比如Spring 的AOP代理。 &
对于AOP的代理类,如果想一部分用Mock,一部分用真实的实例,感觉目前是有些困难,暂时想到的办法就是写两个测试类,一个注入真实属性,一个注入mock属性。
方法调用时,如果不想指定一个明确的参数,就可以用下面这样的写法来表示任意的参数。
Mockito.when(this.provider.getRevenueRoute(Matchers.anyString(), Matchers.anyString(), Matchers.anyBoolean())) &
& & & & & &.thenReturn(rm); &
但是这里也有一个限制就是,如果有一个参数使用了any***(),则所有的参数都必需使用这种方式,不能像下面这样写
Mockito.when(this.provider.getRevenueRoute(Matchers.anyString(), Matchers.anyString(), true)) &使用Fiddler来做本地mock假数据 - 简书
使用Fiddler来做本地mock假数据
前端开发中经常遇到真实环境中的某一个JS文件、CSS文件或者API接口有问题,需要调式。但是完全将代码下载到本地,然后本地运行调式则很烦锁,或是根本获取不到源码。这个时候,我们就需要用一个mock server来在本地环境中为某些请求mock一个假数据。我们现在项目中已经使用了mock server的解决方案来做这个工作,下面再推荐另一种解决方案:FiddlerFiddler是一个调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指,html,js,css等文件,这些都可以让你胡乱修改的意思)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
使用方法:先安装Fiddler:能支持HTTP代理的任意程序的数据包都能被Fiddler嗅探到,Fiddler的运行机制其实就是本机上监听8888端口的HTTP代理。 Fiddler2启动的时候默认IE的代理设为了127.0.0.1:8888,而其他浏览器是需要手动设置的,所以将Firefox的代理改为127.0.0.1:8888就可以监听数据了。Fiddler的基本界面
Fiddler抓取HTTP请求。抓包是Fiddler的最基本的应用,以本博客为例,启动Fiddler之后,在浏览器中输入键入回车之后,在Fiddler的web session界面捕获到的HTTP请求如下图所示:
Mock假数据AutoResponder 用来拦截某一个请求规则,然后mock一个假的数据上去打开AutoResponder标签设置。有没有看到界面上有两个复选框?第一个的作用是开启或禁用自动重定向功能,我们就可以在下面添加重定向规 则了。第二个复选框框勾上时,不影响那些没满足我们处理条件的请求。
我们可以通过“Add…”按钮手动添加规则,不过这个URL已经出现在我们的session列表中,可以直接拖动过来。在左侧的Session列表 中选择第一步找到的session,拖动到AutoResponse标签中。这样就创建了一个针对这个URL的规则。
Fiddler帮我们生成的规则是:当URL为:返回200,使用和Session 4一模一样的内容返回我们需要修改这个规则,
选择“Find a file…”,就可以选择本地的文件作为返回的body内容。自动重定向功能是Fiddler最实用的功能,这里的Rule可以自由地设定,可以使用搜索(默认)、精确匹配(EXACT)、正则表达式匹 配(REGEX)。处理方式可以选择使用文件,也可以选择合适的时间暂停数据流(*bpu、*bpafter),人工干预。通过以上几个步骤,我们演示了 怎样将HTTP请求重定向到本地的文件,进行web调试。这种调试方式不需要发布到线上再验证,避免了修改不成功、对用户造成影响的风险,而且不需要搭建 复杂的开发服务器等开发环境,非常适合快速web调试。mock.js-无需等待,让前端独立于后端进行开发 - CNode技术社区
积分: 2795
这家伙很懒,什么个性签名都没有留下。
首先啦,我不认识mock.js的作者,带着需求找到mock.js让我觉得很惊艳。
相对于其他同类的框架的实现,mock.js超出了我的意料。
基于 数据模板 生成模拟数据。
基于 HTML模板 生成模拟数据。
拦截并模拟 ajax 请求。
是的,mock.js只做上述的几件事,但做的足够出色。
解决的问题
开发时,后端还没完成数据输出,前端只好写静态模拟数据。
数据太长了,将数据写在js文件里,完成后挨个改url。
某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼。
想要尽可能还原真实的数据,要么编写更多代码,要么手动修改模拟数据。
特殊的格式,例如IP,随机数,图片,地址,需要去收集。
超烂的破网速…
以上都不再是问题
接下来体验 拦截ajax请求并返回模拟数据。
步骤1 - 安装
安装太简单,跳过
步骤2 - 配置模拟数据
Mock.mock('http:/&#', {
'name'
: '[@name](/user/name)()',
'age|1-100': 100,
'color'
: '[@color](/user/color)'
步骤3 - 发送ajax请求(jquery版)
url: 'http:/&#',
}).done(function(data, status, xhr){
console.log(
JSON.stringify(data, null, 4)
步骤4 - 查看响应的结果
// 结果1
&name&: &Elizabeth Hall&,
&age&: 91,
&color&: &#0e64ea&
// 结果2
&name&: &Michael Taylor&,
&age&: 61,
&color&: &#081086&
// 结果N ..
技术: javascript
时间: 2014年8月
的确好东西,需要前后端提前沟通好数据格式
恩,目前和同事就是根据文档来开发的。 个人项目我想这样做,也很方便。
做 Mock.js 的是我同事,就坐在我对面,哈哈哈
牛人 牛同事啊
思路不错。
看了博客,里面有个 阅读 javascript权威指南 的读书计划。那本书我一直没读过,也想学习啊,可以同学么?时间进度是怎么安排的?
暂时搁置了。:(
你可以上YY,某个群里他们有组织这本书的读书计划,他们在YY分享心得,但是我没去过,上YY应该找到的。
jquery源码分析的作者啊
恕我愚昧,YY是什么?
哪个yy群?
这个应该是一个好东西,就是网站打开好慢了哦
mock-angular
我吧代码复制到了了,可是拦截不了ajax
不知道什么情况 求大哥大姐指导
哪里有教程呢?
跨域了不在同一个域名下。
自豪地采用
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的

我要回帖

更多关于 mockito 无返回值方法 的文章

 

随机推荐