首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spock单元测试框架以及美团优选实践

目前,美团优选物流绝大部分后端服务已经采用了Spock作为测试框架,开发效率、可读性和维护性方面均取得了不错收益。 1. 背景 2. Spock是什么?和JUnit、jMock有什么区别? 3....这个就是SpockMock用法,当调用studentDao.getStudentInfo()方法返回一个List。...动态Mock静态方法 考虑场景,让静态方法每次调用返回不同值。...这样写法,就可以每次测试业务方法,让HttpContextUtils.getCurrentSource()和HttpContextUtils.getCurrentCurrency()返回不同来源和币种...,接口里变量默认都是static final,所以我们要先把这个INSTANCE静态final变量Mock掉,这样才能调用方法convert()返回我们想要值。

2.7K20

Spock单元测试框架以及美团优选实践

目前,美团优选物流绝大部分后端服务已经采用了Spock作为测试框架,开发效率、可读性和维护性方面均取得了不错收益。 1. 背景 2. Spock是什么?和JUnit、jMock有什么区别? 3....这个就是SpockMock用法,当调用studentDao.getStudentInfo()方法返回一个List。...动态Mock静态方法 考虑场景,让静态方法每次调用返回不同值。...这样写法,就可以每次测试业务方法,让HttpContextUtils.getCurrentSource()和HttpContextUtils.getCurrentCurrency()返回不同来源和币种...,接口里变量默认都是static final,所以我们要先把这个INSTANCE静态final变量Mock掉,这样才能调用方法convert()返回我们想要值。

3.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

让单测变得如此简单 -- spock 框架初体验

引言 测试流程软件开发过程中显得越来越重要了,因为无论经验多么丰富开发者,都难免在编码过程中出现失误甚至是逻辑错误,在这样前提下,单元测试就显得非常重要了。...} def 是 groovy 关键字,他可以用来创建变量方法,这里我们创建了一个名为“test add”测试方法。...Mock 测试 工程项目中,我们编写程序往往依赖于外部接口调用,但在单测环节,我们应该做到保证我们程序在外部接口返回正确前提下结果正确性,但由于实际运行环境、权限等等条件限制,我们往往不能在例行自动化单元测试中真的去调用外部接口...Mock 测试通过模拟外部调用结果,让我们测试程序得以继续运行, JUnit 中,我们需要使用 Mockit 来实现接口 Mock,同时,Mock 编写也较为复杂,这些 spock 中就显得非常简单了...公共方法 JUnit 有一个很方便功能,那就是可以定义每个测试方法开始前与结束后调用方法,以便做一些公共自动处理功能,spock 也提供了相应机制: 方法 说明 setup() 每个方法执行前调用

1.3K20

spock测试桩mock和stub区别及使用场景

如图,有如上方法调用关系(模块依赖关系):A调用B和E方法,B调用C和D方法使用spock进行单元测试,有如下情景,分别可使用stub和mock。...stub测试桩可以给E方法模拟一个或多个假返回值,我们测试只需要调用stub对象E方法即可,调用返回值是我们在生成stub对象指定。...以上是spock中stub测试桩使用场景,总结为一句就是: stub测试桩给被调用者( 方法/模块)制造假返回值,以便不影响调用测试。...如果要测试A方法,但是我们没办法调用B来检测结果,就可以使用mock测试桩,生成一个Bmock对象。检验结果,可以使用Bmock对象替代B。...对象断言请参考: http://jvm123.com/2019/09/spock-ce-shi-zhuang-2.html 以上是spockmock测试桩使用场景,总结为一句就是: mock测试桩给被测试方法模拟一个预期效果

3.9K50

spock】单测竟然可以如此丝滑

使用其它单测框架,与之类似的是 assert 。...第一行或者说表头,列出了我们要数据变量名称,这里要与 expect 中对应,不能少但是可以多。其它行都是数据行,与表头一样都是通过 『 | 』 号分隔。...这里有点类似我们 mybatis 或者一些模板引擎中使用方法。# 号拼接声明变量就可以了,执行后结果如下。 这下更清晰了。...因为 userDao 这个对象是我们 mock 出来,他就是一个假对象,为了让后续流程按我们想法进行,我可以通过『 >>』 让 spock 模拟返回指定数据。...3.7 其它内容 3.7.1 公共方法 方法名 作用 setup() 每个方法执行前调用 cleanup() 每个方法执行后调用 setupSpec() 每个方法类加载前调用一次 cleanupSpec

1.3K30

Spock测试框架实践(六)

各类mock框架让这类验证变得可行,而spock除了支持这类验证,并且做更加优雅,下面我们看一下Spockmock应用实践。...调用send,两个subscriber都应该被调用一次receive(“hello”)。...二、Stubbing 对mock对象定义函数返回值可以用如下方法: subscriber.receive(_) >> "ok" 符号代表函数返回值,执行上面的代码后,再调用subscriber.receice...四、其它类型mock对象 Spock也支持spy、stub之类mock对象,但是并不推荐使用,因为使用“正规”BDD思路写出代码不需要用这些方法来测试,官方解释是: Think twice...(使用此功能之前请三思。规范下更改代码设计可能会更好。) 具体使用方法如果有兴趣可以参考官方文档.

1.7K20

spock框架中测试桩使用 转

这时就可以用测试桩:给squre()方法造一个或多个假返回值,让我们能够正常测试后面的plus()方法。 测试桩Stub与Mock具体解释在后面代码注释中做了说明。...测试A过程中, * A需要与程序、系统或对象B进行交互,那么Stub/Mock就是用来模拟B行为来与A进行交互。...作用如其名,就是需要, * 能够发现它存在,即可。就好像点名,“到”即可。...* 也即是要风得风、要雨得雨、要返回什么值就返回什么值。 * *   总体来说,stub完全是模拟一个外部依赖,用来提供测试所需要测试数据。...== 1 y == 2 z == 3 } } 使用Stub与Mock方法就可以得到对应傀儡实例,我们可以对这个 傀儡 实例定义其方法返回值。

92630

大型企业通常如何进行单元测试?

每个方法或类应只负责一项任务,这样测试用例只需关注当前方法有效性,而不需要考虑方法之间调用。每个测试用例也应只关注一件事情。...同时,Spock不仅局限于模拟(Mock),还提供各种高效功能(这些是传统JUnit和Mockito无法实现):Spy:可以对部分资源进行模拟,方便地对同一类内相互调用方法进行模拟和验证。...Mock:对依赖资源进行模拟,同时验证依赖资源被调用次数。例如,测试Redis写功能,可以模拟Redis客户端,验证传入方法参数是否符合预期,以及验证Redis写入方法调用次数。...Stub:对依赖资源进行模拟返回一个结果,不关心调用次数或参数是否匹配预期。可以直接忽略待验证方法成员封装级别,可以直接测试私有声明方法变量。...基于数据驱动测试:借助where关键词和数据表格方式,一个测试案例中验证要测试参数和期望返回所有可能情况。可以方便地验证抛出异常。

6900

Spock框架Mock对象、方法经验总结

+,Spock自带Mock和Spy足够好了,对于对象行为模拟满足绝大部分场景,但是涉及静态方法模拟时候存在局限性,所以引入Mockito和PowerMock来实现设计静态方法测试模拟场景。...提供功能,用到注解@Shared,不加的话无法Spock方法中进行赋值操作,但是可以当做一个普通对象使用。...上述DemoMock方法时候对参数进行了断言和处理,这也是Spock框架一个特性,其他均为Groovy语法特性。...,包括通过Mock对象创建对象方法中,如果调用到定义过行为方法,也会走自定义逻辑。...通常我们需要构建返回对象,如果对象需要赋值属性过多,可以使用初始化赋值方法,下面是Mock一个返回list方法返回Demo: Mockito.when(newser.selectAllService

5K74

单元测试框架spock和Mockito应用

先介绍一下两位主角 spock是一款基于Groovy语言单元测试框架,其基础也是JavaJunit,目前最新版已经到了2.0,但对Groovy和响应Java版本要求较高,具体信息参考:Spock...写单元测试过程中,由于各种依赖关系导致阻碍,我们必需用到Mockito类似的框架来完成资源、对象模拟。...mockedList.add("3") mockedList.add("3") mockedList.add("3") expect:"验证属性以及方法调用次数...模拟方法返回"() { given: "虚拟一个迭代器对象" def iterator = mock(Iterator.class) when(iterator.next...3 == listsss.get(3) } /** * 对于未指定mock方法,spy默认会调用真实方法,有返回返回真实返回值,而mock默认不执行,有返回,默认返回

2.2K50

Spring Boot项目中使用Spock框架

pom文件中添加Spock框架依赖 <!...如何与mock对象一起工作,之前文章中我们已经TestMockBeansConfig类中定义了PublisherRepositorySpring Bean,如下所示,由于@Primary存在,使得在运行测试用例...JSON字符串装入HTTP响应体,依赖Jackson库执行转换,可能会有循环依赖问题——模型关系中,一本书依赖一个出版社,一个出版社有包含多本书,执行转换,如果不进行特殊处理,就会循环解析。...setup:这个块用于定义变量、准备测试数据、构建mock对象等; expect:一般跟在setup块后使用,包含一些assert语句,检查在setup块中准备好测试环境 when:在这个块中调用要测试方法...Spock也提供了setup()和cleanup()方法,执行一些给所有测试用例使用准备和清除动作,例如在这个例子中我们使用setup方法:(1)mock出web运行环境,可以接受http请求;(2)

2K10

单元测试填坑笔记,新技能Get!

对于 Mock 代码来说,我们关注点是 Mock 方法有没有被调用,以什么样参数被调用,被调用次数,以及多个 Mock 函数先后调用顺序。...比如,测试addUser方法,如果是Stub方式则关注方法返回结果,即用户是否添加成功,邮件是否发送成功;而Mock方式则倾向于本次添加行为验证,比如sendEmail方法调用次数等。...目前大多数mock工具都提供mock退化为stub支持,以Mockito为例,我们可以通过anyObject(), any等方式对参数进行匹配;使用verify方法可以对方法调用次数和参数进行检验...以下是几种常用Mock框架对比,不知道怎么选,不妨根据现状,需要注意是,大部分Mock框架都不支持Mock静态方法。 ?...单测实战 写单测一般包括3个部分,即Given(Mock外部依赖&准备Fake数据),When(调用被测方法)以及Then(断言执行结果),这种写法和Spock语法结构也是一致

59830

Spock测试框架实践(二)

使用Spock框架编写测试,测试类需要继承自Specification类。...5.1 Setup Blocks setup也可以写成given,在这个block中会放置与这个测试函数相关初始化程序。一般会在这个block中定义局部变量,定义mock函数等。...5.2.1 断言 条件类似junit中assert,就像上面的例子,then或expect中会默认assert所有返回值是boolean型顶级语句。...但是传统测试框架很难轻松制造数据,要么依赖反复调用,要么用xml或者data provider函数之类难以理解和阅读方式。 ?...而在spock中,通过where block可以让这类需求实现起来变得非常优雅。 ? 可以为标记@Unroll方法声明动态spec名。运行时,名称会被替换为实际参数值。

1.4K20

2021年软件测试工具总结(1):抓包工具、单元测试工具

这个框架突出点在于它美妙和高效表达规范语言。得益于JUnit runner,Spock能够大多数IDE、编译工具、持续集成服务下工作。...Mock工具 进行单元测试,需要测试类或函数有很多依赖,某些依赖不好构建,如Mysql或者Redis里数据,导致单元测试代码里无法完成构建。...支持类级别整体mock和部分方法重写,以及实例级别整体mock和部分mock。...可以mock静态方法、私有变量及局部方法 代码覆盖率统计工具 官网地址:http://jmockit.org/ 单元测试覆盖率工具 JCoCo Jacoco是一个开源免费Java代码覆盖工具,由EclEmma...;UnitAuto 不需要写任何代码,直接读取方法属性,自动注入参数,拿到返回值和类成员变量,机器学习自动化校验。

2.4K20

Spock框架Mock静态资源经验汇总

前面讲了Spock框架Mock对象、方法经验总结,今天分享一下Spock框架中Mock静态资源实践经验汇总。分成「静态资源」和「混合场景」。...静态资源 静态变量 这个使用场景很少,如果需要Mock,直接把Mock对象赋值给静态资源即可。所以这个场景pass。...,既要Mock静态方法,也要Mock对象方法,就必须使用PowerMock提供能力。...原因之前提过,主要是因为增加了类注解之后,Spock和Mockito一Mock对象和定义方法功能会无法运行,这个没找到具体文档做出区分,所以如果遇到混合场景,建议使用PowerMock进行对象Mock...高版本依赖mockito-inline中,也是支持对静态类和静态方法Mock,但在Spock中极难使用,资料说是因为项目pom中Spock版本与Mockito版本不一致导致,尝试了几个组合依然无法解决

1.5K30

spock中使用到groovy语法

使用spock测试框架,常常会有如下测试代码出现: // 测试方法 def "test plus 1"() { given: "准备数据" def...: "校验结果" c == 4 - 1 } 很多人把它当作固定格式来看待 ,尤其是像我这种从java几天内上手groovy和spock,几乎不会去深究这是什么语法。...但是使用groovy语言spock测试框架中,这种语法很流行,因为它确实让测试代码更加简单明了。...Power assertion 强断言/强力断言 Power assertion 强断言/强力断言,就是断言失败,提供一个可视化表达,让我们更清楚地看到断言失败原因以及断言语句每一部分运算结果...power assertion data tables def "test1"() { given: "准备mock数据" expect: "测试方法"

1.5K30

关于单测技术选型,聊聊我思考

缺点:代码不够简洁、没有统一单测结构、不支持静态方法和私有方法 Mock。...缺点:学习成本略高、不支持静态方法和私有方法 Mock。...而 Spock 框架则在测试结构、异常测试、条件测试等方面比较有优势。因此,选择哪个测试框架完全基于实际情况。例如,如果你目前情况是: Java 是唯一语言。 想要更强编译错误检查。...而 Spock 虽然使用人群没有 Mockito 那么多,但国内也有一些大厂使用 Spock,例如美团等(可参考:Spock单元测试框架介绍以及美团优选实践)。...而 Spock 不支持 static 方法及 private 方法 Mock 缺陷,则尝试通过整合 PowerMock 或 TestableMock 来解决。

63310

mock测试工具

并创建一个环境变量) 4.勾选Make mock server private(注:需要一个x-api-key,把生成kye放到header中) 5.点击备注中链接登录到postman官网,生成一个...x-api-key 我们得到了一个mock server地址,也就是说,这个mock server是postman自己服务器上为我们创建无论我们是否打开postman,我们都可以直接用这个地址来访问...生成x-api-key: 当header中未添加x-api-key,会有以下提示: (2)创建方法二: 直接创建 mock server, 并选择一个已存在collection...如/postwithparam "text", -- 文本域,一般用于返回 "cookies", -- cookies信息 "queries", --get方法用 "forms..." --post方法用 "redirectTo" --重定向到某个地址 "xpaths", "json_paths", "version", "file", "path_resource

2.3K30

使用 Moq 测试.NET Core 应用 -- Mock 方法

false, 所以现在IsHealthy()方法没有设定情况下返回值就是false....It类 而PhysicalExamination这个具体实现类由于各种原因导致还没有实现, 为了让它不妨碍我们单元测试, 我先设定让它在无论进什么参数情况下都会返回true....It.IsAny(), 它表示传递给方法参数类型只要是T就可以, 值是任意. 只要满足了这个条件, 那么方法返回值就是后边Returns()方法里设定值....MockBehavior.Loose, 即使方法没有被预先设置, 调用时候也不会抛出异常. 它会返回方法返回类型默认值....可以感觉到: Loose Mock, 可以少写一些设定代码, 可以返回默认值, 不易让测试中断 Strict Mock, 需要写跟多设定代码, 每个被调用方法都需要进行设定, 所以也更容易让测试中断

2.3K40
领券