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

Spock 测试框架介绍和使用详解

Java项目中使用groovy简化测试 、 java项目测试框架spock使用教程 简介 Spock 框架是一个基于groovy语法测试框架,由于使用groovy,所以使用起来比 junit 更加灵活...测试方法生命周期 在junit使用时,主要用以下注解来标记测试方法: @Test :标记需要运行测试方法,一个测试类中可以有多个@Test方法; @Before/@After :标记方法,会在每个测试方法运行之前.../之后运行一次; @BeforeClass/@AfterClass :标记方法会在测试类初始化时/销毁时运行spock 没有使用以上注解形式,而是测试类需要继承 Specification 父类...} } 运行结果为: ? spock测试生命周期方法执行顺序 3....def c = calculateService.plus(a, b) then: "校验结果" c == 4 - 1 } 其中,@Share注解表示是各个测试方法共享一个实例

3.6K31

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

每个开发人员都明白单元测试作用,也都知道代码覆盖率越高越好。高覆盖率代码,相对来说出现 BUG 概率就越低,在线上运行就越稳定,接锅也就越少,就也不会害怕测试同事突然关心。...: 通过添加 @Unroll 注解spock 自动把上面的代码拆分成了 3 个独立单测测试,分别运行运行结果更清晰了。...上面 『 | 』 号对这么整齐。都是我一个空格一个 TAG 按出来。虽然语法不要求对齐,但是逼死强迫症。...再于测试代码类上加上 @SpringBootTest 注解就可以了。...,如果运行时间超过了指定时间就算失败,这时可以使用 timeout 注解 @Timeout(value = 900, unit = TimeUnit.MILLISECONDS) def

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

在Spring Boot项目中使用Spock框架

Spock通过@RunWith注解与JUnit框架协同使用,另外,Spock也可以和Mockito(Spring Boot应用测试——Mockito)协同使用。...,由于@Primary存在,使得在运行测试用例时Spring Boot优先使用Mockito框架模拟出实例。...我们这里通过@JsonBackReference注解阻止循环依赖。 分析 可以看出,通过Spock框架可以写出优雅而强大测试代码。...查看Specification类源码,可以发现它被@RunWith(Sputnik.class)注解修饰,这个注解是连接Spock与JUnit桥梁。...Spock也提供了setup()和cleanup()方法,执行一些给所有测试用例使用准备和清除动作,例如在这个例子中我们使用setup方法:(1)mock出web运行环境,可以接受http请求;(2)

2K10

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

也有改了原来代码逻辑导致单元测试执行失败;或者新增了分支逻辑,单元测试没有覆盖到;最终随着业务快速迭代单元测试代码越来越难以维护。...这样单元测试对代码质量帮助不大,更多是为了测试测试。最后时间没少花,可效果却没有达到。...@Unroll注解,可以把每一次调用作为一个单独测试用例运行,这样运行单元测试结果更加直观: 而且如果其中某行测试结果不对,Spock错误提示信息也很详细,方便进行排查(比如我们把第1条测试用例返回邮编改成...Spock单元测试代码继承自Specification基类,而Specification又是基于JUnit注解@RunWith()实现,代码如下: PowerMockPowerMockRunner...也是继承自JUnit,所以使用PowerMock@PowerMockRunnerDelegate()注解,可以指定Spock父类Sputnik去代理运行PowerMock,这样就可以在Spock里使用

2.7K20

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

也有改了原来代码逻辑导致单元测试执行失败;或者新增了分支逻辑,单元测试没有覆盖到;最终随着业务快速迭代单元测试代码越来越难以维护。...这样单元测试对代码质量帮助不大,更多是为了测试测试。最后时间没少花,可效果却没有达到。...@Unroll注解,可以把每一次调用作为一个单独测试用例运行,这样运行单元测试结果更加直观: 而且如果其中某行测试结果不对,Spock错误提示信息也很详细,方便进行排查(比如我们把第1条测试用例返回邮编改成...Spock单元测试代码继承自Specification基类,而Specification又是基于JUnit注解@RunWith()实现,代码如下: PowerMockPowerMockRunner...也是继承自JUnit,所以使用PowerMock@PowerMockRunnerDelegate()注解,可以指定Spock父类Sputnik去代理运行PowerMock,这样就可以在Spock里使用

3.1K20

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

spock 是通过 groovy 实现,groovy 是一种在 jvm 下运行动态语言,与 java 最主要区别就在于 groovy 拥有更强语义,编写灵活,可读性强,虽然对于编写较大项目来说...@Unroll 注解 — 让测试结果分条展示 上图中,虽然我们运行了多个测试用例,但结果却显示在一条结果中,这样,当我们用例中某条出错时,是难以直观定位到,既然是多个用例,我们预期中当然是每个用例单独占用一行结果来显示...spock 框架也提供了批量测试拆分机制,只要在方法上加上 @Unroll 注解,多个测试用例就会在结果中被分开展示了。...@Timeout — 测试超时 在方法上添加 @Timeout 注解,可以实现测试用例超时指定。...Mock 测试通过模拟外部调用结果,让我们测试程序得以继续运行,在 JUnit 中,我们需要使用 Mockit 来实现接口 Mock,同时,Mock 编写也较为复杂,这些在 spock 中就显得非常简单了

1.2K20

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

前面讲了Spock框架Mock对象、方法经验总结,今天分享一下Spock框架中Mock静态资源实践经验汇总。分成「静态资源」和「混合场景」。...静态方法 Mock静态方法我们使用PowerMock结合Mockito方案,首先在测试类增加如下注解: @RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate...混合场景 当一个测试用例中,既要Mock静态方法,也要Mock对象方法,就必须使用PowerMock提供能力。...原因之前提过,主要是因为增加了类注解之后,Spock和Mockito一Mock对象和定义方法功能会无法运行,这个没找到具体文档做出区分,所以如果遇到混合场景,建议使用PowerMock进行对象Mock...mockito-inline中,也是支持对静态类和静态方法Mock,但在Spock中极难使用,资料说是因为项目pom中Spock版本与Mockito版本不一致导致,尝试了几个组合依然无法解决,又有人言

1.5K30

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

技术方案 本技术方案基于公司力推Spock单元测试框架,spock是一款基于Groovy语言单元测试框架,其基础也是JavaJunit,目前最新版已经到了2.0,但对Groovy和相应Java版本要求较高...,我把import内容也贴出来了,如果同样代码无法运行,可以排查一下是否import正确方法和类。...这里不是很建议import static ,因为可能出现混用以及不易排查问题。 由于目前测试没有遇到使用Spy放行逻辑,所以均使用Mock模式,需要对Mock对象方法进行模拟。...原因是在混合静态资源和非静态资源场景下,指定了PowerMock@RunWith运行规则,不兼容Spock写法,需要用到PowerMock框架Mock对象功能。...提供功能,用到注解@Shared,不加的话无法在Spock方法中进行赋值操作,但是可以当做一个普通对象使用。

4.9K74

2018 年你不能错过 Java 类库

独立应用可以直接调用他们自己选择日志框架。而对于logback来说,这个问题是没有意义,因为logback是通过SLF4J来暴露其日志接口。...参数化运行区别如下: 更明确 - 参数实在测试方法参数中,而不是在类字段中 更少代码 - 你不需要用构造函数来设置参数 你可以在同一个类混合使用参数化和非参数化方法。...极大减少了诸如自动mock样板,从而使测试更加易读。 可以使得测试能够根据被测试对象上API改变而弹性变化。...标有@Inject注解字段会被自动注入,不需要担心会遗忘掉它们 使得将对象连接在一起变得容易,因此你可以将一个单元测试变成集成测试一部分 @RunWith(JukitoRunner.class) public...body内容模式 请求验证 在单元测试运行,但是是作为一个对立进程或者一个WAR应用形式 可通过流畅Java API、JSON文件和基于HTTPJSON进行配置 对stub录制/回放 故障注入

83420

2017 年你不能错过 Java 类库

独立应用可以直接调用他们自己选择日志框架。而对于logback来说,这个问题是没有意义,因为logback是通过SLF4J来暴露其日志接口。...参数化运行区别如下: 更明确 – 参数实在测试方法参数中,而不是在类字段中 更少代码 – 你不需要用构造函数来设置参数 你可以在同一个类混合使用参数化和非参数化方法。...极大减少了诸如自动mock样板,从而使测试更加易读。 可以使得测试能够根据被测试对象上API改变而弹性变化。...标有@Inject注解字段会被自动注入,不需要担心会遗忘掉它们 使得将对象连接在一起变得容易,因此你可以将一个单元测试变成集成测试一部分 @RunWith(JukitoRunner.class)public...内容模式 请求验证 在单元测试运行,但是是作为一个对立进程或者一个WAR应用形式 可通过流畅Java API、JSON文件和基于HTTPJSON进行配置 对stub录制/回放 故障注入 针对每个请求根据条件进行代理

99780

10个Java开发人员顶级测试工具、库和框架介绍

许多Java开发人员编写在构建期间自动运行 单元测试和集成测试,主要是使用 Jenkins或TeamCity 等持续集成工具。...模拟是现代单元测试基本技术之一,因为它允许您在没有任何依赖性情况下单独测试代码,这就是为什么我鼓励每个Java开发人员学习模拟框架。...当您使用Spock时,您测试将变得更易读并且更易于维护,并且由于其JUnit运行程序,Spock与大多数IDE,构建工具和持续集成服务器兼容。 7....Spring Test Spring MVC带有一个非常有用测试框架,允许在不涉及 Web容器 情况下进行深入测试。 它是向Spring应用程序编写自动化测试最有用库之一。...我还没有列入更多库,例如AssertJ和Hamcrest,它们可以帮助你编写漂亮和流畅测试 – 但是要慢慢来。 首先,学习一种可以在日常工作中使用工具或库。

2.3K50

Spock 2.0 M1版本初探

由JUnit Platform提供支持 Spock 2.0 M1主要变化是向JUnit 5迁移(确切地说,是使用JUnit Platform 1.5(是JUnit 5一部分而不是JUnit 4运行器...这非常方便,因为应该在支持JUnit平台任何地方(IDE,构建工具,质量保障工具等)自动识别并执行Spock测试。另外,平台本身提供功能也应该也适用于Spock。...此外,所有参数化测试都会自动进行。但是,那太好了,目前还没有办法 “滚动”特定测试,如Spock 1.xspock-global-unroll所知。...从M1开始,当前在运行时阻止使用Groovy 3.0执行。...不幸是,没有关于不兼容Groovy版本明确错误消息,只有一个非常隐秘错误消息: Could not instantiate global transform class org.spockframework.compiler.SpockTransform

1.2K20

10个Java开发人员顶级测试工具、库和框架介绍

许多Java开发人员编写在构建期间自动运行单元测试和集成测试,主要是使用Jenkins或TeamCity 等持续集成工具。...模拟是现代单元测试基本技术之一,因为它允许您在没有任何依赖性情况下单独测试代码,这就是为什么我鼓励每个Java开发人员与JUnit一起学习模拟框架。...当您使用Spock时,您测试将变得更易读并且更易于维护,并且由于其JUnit运行程序,Spock与大多数IDE,构建工具和持续集成服务器兼容。...8、Spring Test Spring MVC带有一个非常有用测试框架,允许在不涉及Web容器情况下进行深入测试。 它是向Spring应用程序编写自动化测试最有用库之一。...我还没有列入更多库,例如AssertJ和Hamcrest,它们可以帮助你编写漂亮和流畅测试 - 但是要慢慢来。 首先,学习一种可以在日常工作中使用工具或库。

1K30

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

Spock JUnit JUnit是一个为Java设计开源单元测试框架,多数 Java 开发环境都已经集成了 JUnit 作为单元测试工具。...: 注解支持 支持多线程测试执行 支持数据驱动测试(使用@DataProvider) 官网地址:https://testng.org/ GoogleTest GoogleTest(gtest)是一个跨平台...exe可执行程序,能直接运行 提供丰富命令行参数 Pytest pytest是一个非常成熟全功能支持Python语言自动化测试框架,也可以认为它一个测试管理框架,因为它不仅可以用来做单元测试,...Coverage.py可以指定要通过配置文件分析哪些源文件,通过分析源代码,发现没有测试覆盖代码 官网地址:https://coverage.readthedocs.io 单元测试用例自动生成工具...,生成测试用例均符合Junit标准,可直接在Junit中运行,并得到了Google和Yourkit支持。

2.3K20

从 PHP 到 Java

注解(反射):Java 里注解非常繁杂,类、方法、变量上都是,不光基础类库、Spring 框架里有很多,还可以自己定义新注解。...用哪个方法都行,又没有一个权威指示的话,反而很难让人很难决定。...有各种框架和组件需要学习,如 web 框架 spring系列、数据库框架 mybatis、日志框架 log4j2,测试框架 spock,JVM语言 groovy 等等,每一种学习都需要花费很多时间。...经验 ---- 一个月多来,感觉自己勉强入门了,虽然还有很多东西不熟悉,甚至都没有接触过,但不再是之前一头雾水,面对小问题也一脸茫然了。...spock测试框架来运行,比较灵活,像测试一样提供多个 case 运行程序; 推荐学习使用 spock,语法简洁,还可以省去不必要打包时间,快速调试,可以在 IDE 里一键运行

2.2K50

Spock测试框架实践(二)

在上一次Spock实践中我们介绍了Spock优点和Demo搭建,今天我们继续介绍一些Spock常用实践。...在使用Spock框架编写测试时,测试类需要继承自Specification类。...5、 Blocks 每个feature method又被划分为不同block,不同block处于测试执行不同阶段,在测试运行时,各个block按照不同顺序和规则被执行,如下图:...如果要验证有没有跑出异常,可以使用thrown ? 5.2.2 断言 要获取抛出异常对象,可以用以下语法: ? 如果要验证没有抛出某种异常,可以用notThrown(): ?...而在spock中,通过where block可以让这类需求实现起来变得非常优雅。 ? 可以为标记@Unroll方法声明动态spec名。运行时,名称会被替换为实际参数值。

1.4K20

Groovy动态添加方法和属性及Spock单测

在最近一边学习一边复习过程中,发现了很多有意思事情。今天就分享一个groovy.lang.MetaClass应用:如何运行中,动态给类和对象增加属性和添加方法。...对于Java、Groovy来讲,如果用到一个类,那么这个类属性和方法已经是固定,可是随着我学习,发现这个常识并不靠谱。下面开始我表演。...单元测试 下面使用Spock单元测试框架进行测试,有兴趣可以看看之前文章: 单元测试框架spock和Mockito应用 Spock 2.0 M1版本初探 Maven和Gradle中配置单元测试框架Spock...Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock数据驱动Demo 代码如下: package com.funtest.spock import org.apache.logging.log4j.LogManager...@6c68765> at com.funtest.spock.Mop.测试动态添加获取属性(Mop.groovy:60) INFO-> Test worker 测试类[com.funtest.spock.Mop

90960

2018 年你可能已经错过 Java 类库

独立应用可以直接调用他们自己选择日志框架。而对于logback来说,这个问题是没有意义,因为logback是通过SLF4J来暴露其日志接口。...与标准JUnit 参数化运行区别如下: 更明确 - 参数实在测试方法参数中,而不是在类字段中 更少代码 - 你不需要用构造函数来设置参数 你可以在同一个类混合使用参数化和非参数化方法。...标有@Inject注解字段会被自动注入,不需要担心会遗忘掉它们 使得将对象连接在一起变得容易,因此你可以将一个单元测试变成集成测试一部分 ?...GitHub,入门, 用户指南 Spock 企业级测试和规范框架。 ?...GitHub, Website WireMock 用于模拟HTTP服务工具 对HTTP响应进行打桩,可以匹配URL、header头信息和body内容模式 请求验证 在单元测试运行,但是是作为一个对立进程或者一个

1.6K20
领券