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

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

测试方法的生命周期 在junit使用时,主要用以下注解来标记测试类的方法: @Test :标记需要运行的测试方法,一个测试类中可以有多个@Test方法; @Before/@After :标记的方法,会在每个测试方法运行之前.../之后运行一次; @BeforeClass/@AfterClass :标记的方法会在测试类初始化时/销毁时运行; spock 没有使用以上的注解形式,而是测试类需要继承 Specification 父类...,重写父类中的以下方法,就可以自定义测试方法的生命周期: def setup() {}         // run before every feature method def cleanup()...spock测试的生命周期方法执行顺序 3. 测试方法的格式 (1)given … expect … 格式: given语句块为条件,expect为测试期望得到的结果,结果为true则通过测试。...setupSpec() 方法中初始化了这个实例。 (3)when … then … 语义同上。

3.8K31

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

单元测试通过对程序中每个部分进行独立的测试覆盖,且在每次代码更新后自动执行,保证了新的修改不会影响到旧的功能。...可以说,编写单元测试让程序员尽早的发现问题、暴露问题,从而让整个编码过程更为可控,同时,编写单元测试过程中对细节的关注,也让程序员更多的思考自己编写的程序的健壮性。...既然单元测试如此重要,那么我们是否可以找到一个编写高效、易于维护、简单易懂的单元测试框架呢?java 中的 spock 正是凭借这样的理念而诞生的一种测试框架。...执行测试方法,我们就可以看到测试的结果: 如果执行失败,则会展示: 4.3. expect where — 实现多条测试用例的测试 上面的示例我们只使用了一个测试用例,但往往我们希望能够实现多个测试用例的批量测试...cleanup() 每个方法执行后调用 setupSpec() 每个方法类加载前调用一次 cleanupSpec() 每个方法类执行完调用一次 7.

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

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

    前面讲了Spock框架Mock对象、方法经验总结,今天分享一下Spock框架中Mock静态资源的实践经验汇总。分成「静态资源」和「混合场景」。...@SuppressStaticInitializationFor这个注解处理类的初始化,这个注解后面跟的是不需要进行初始化的类的包路径,在现在的实践中通常和@PrepareForTest后面的类是一致的...其次我们需要在类初始化代码中对这个类进行Mock,语法如下: PowerMockito.mockStatic(HttpBase.class) PowerMockito.mockStatic...原因之前提过,主要是因为增加了类注解之后,Spock和Mockito一的Mock对象和定义方法的功能会无法运行,这个没找到具体的文档做出区分,所以如果遇到混合场景,建议使用PowerMock进行对象的Mock...mockito-inline中,也是支持对静态类和静态方法的Mock的,但在Spock中极难使用,资料说是因为项目pom中的Spock版本与Mockito版本不一致导致的,尝试了几个组合依然无法解决,又有人言

    1.7K30

    JsonPath工具类单元测试

    上期文章讲到JsonPath工具类封装,遗留了一个坑,就是关于工具类的单元测试,由于中午得空,所以使用单元测试框架Spock写了一点点单元测试用例,分享出来,供大家参考。...使用Groovy语言,spock测试框架,如需了解请参考文章: Maven和Gradle中配置单元测试框架Spock Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock...试试Groovy进行单元测试 Spock 2.0 M1版本初探 单元测试框架spock和Mockito应用 中间用到了Groovy的文本块,有兴趣的可以看看Java文本块。...() { logger.info "测试类开始!...控制台输出 这里只放了最后一个方法的输出,其他的都是成功的,所以就省去了。 INFO-> 第 16 次测试结束! INFO-> 第 16 次测试结束! INFO-> 第 17 次测试结束!

    1K30

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

    我们只要看到 expect 这个标签就明白,他的范围内都是我们预期要得到的结果。 3.3.3 验证加操作 - given - and 这里代码比较简单,参数我只使用了一次,所以直接写死。...它代表着当执行了 when 块中的操作,会出现 then 块中的期望。...3.7 其它内容 3.7.1 公共方法 方法名 作用 setup() 每个方法执行前调用 cleanup() 每个方法执行后调用 setupSpec() 每个方法类加载前调用一次 cleanupSpec...() 每个方法类执行完调用一次 这些方法通常用于测试开始前的一些初始化操作,和测试完成后的清理操作,如下: def setup() { println "方法开始前初始化"...} def cleanup() { println "方法执行完清理" } def setupSpec() { println "类加载前开始前初始化

    1.4K30

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

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

    99460

    unittest系统(六)如何在一个测试类多个测试用例执行中只初始化和清理一次?

    前言 之前分享了一系列的文章,分别从原理,运行,断言,执行,测试套件,如何跳过用例来讲解unittest,那么我们继续分享 正文 我们首先看下下面的代码 import unittestclass...我们发现在初始化的时候呢,我们每次都会初始化,但是在实际的测试中呢,我们可能会是有些参数或者动作只需要做一次即可,那么我们只能在用例中初始化一次。那么unittest里面有没有这样的方法 呢?...我们将这些代码带入到我们的测试用例中,看下效果会如何。...self.assertEqual(1, 1) self.assertFalse(False)if __name__=="__main__": unittest.main() 我们执行下看下最后的效果...这样我们就实现了初始化一次,清理一次的需求。

    1.8K30

    浅谈单元测试

    而单元测试更甚,据大佬和吹牛逼的群聊中判断:好的单元测试代码大概是被测代码的2-3倍,这种工作量对于开发人员来讲是不可接受的。...之前对单元测试进行过一些尝试,写过一点文章: Maven和Gradle中配置单元测试框架Spock Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock数据驱动Demo...试试Groovy进行单元测试 使用WireMock进行更好的集成测试 如何测试这个方法--功能篇 如何测试这个方法--性能篇 单元测试用例 JUnit 5和Selenium基础(一) JUnit 5和Selenium...基础(二) JUnit 5和Selenium基础(三) 近几日一直在对之前的性能测试框架进行优化,在这个过程中,我之前利用Groovy单元测试框架spock写过的两个性能测试框架的单元用例起到了非常大的帮助...,不用再去检查各个类的实现代码有没有忘记修改的,直接运行用例,看结果即可。

    61720

    单元测试框架spock和Mockito应用

    先介绍一下两位主角 spock是一款基于Groovy语言的单元测试框架,其基础也是Java的Junit,目前最新版已经到了2.0,但对Groovy和响应的Java版本要求较高,具体信息参考:Spock...在写单元测试的过程中,由于各种依赖的关系导致的阻碍,我们必需用到Mockito类似的框架来完成资源、对象的模拟。...("测试类[${getClass().getName()}]结束了") } def "这是一个普通的demo"() { given:"创建一个存根list,添加一些元素...,spy默认会调用真实的方法,有返回值的返回真实的返回值,而mock默认不执行,有返回值的,默认返回null */ def "spy和mock区别"() { given:...参考文章: Maven和Gradle中配置单元测试框架Spock Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock数据驱动Demo ---- 郑重声明:“FunTester

    2.3K50

    在Spring Boot项目中使用Spock框架

    在这个小节中我们会利用Spock、Mockito一起编写一些测试用例(包括对Controller的测试和对Repository的测试),感受下Spock的使用。...,测试通过 接下来试验下Spock如何与mock对象一起工作,之前的文章中我们已经在TestMockBeansConfig类中定义了PublisherRepository的Spring Bean,如下所示...; then : 一般跟在when后使用,尽可以包含断言语句、异常检查语句等等,用于检查要测试的方法执行后结果是否符合预期; cleanup:用于清除setup块中对环境做的修改,即将当前测试用例中的修改回滚...,在这个例子中我们对publisherRepository对象执行重置操作。...Spock也提供了setup()和cleanup()方法,执行一些给所有测试用例使用的准备和清除动作,例如在这个例子中我们使用setup方法:(1)mock出web运行环境,可以接受http请求;(2)

    2.1K10

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

    我们可以来看接下来的场景:void方法,没有返回结果,如何写测试这段代码的逻辑是否正确? 如何确保单元测试代码是否执行到了for循环里面的语句,循环里面的打折计算又是否正确呢?...实际上StudentDTO.java 这个类并没有3个参数的构造方法,是Groovy帮我们实现的。Groovy默认会提供一个包含所有对象属性的构造方法。...ExpectedException的方式也只提供了expectMessage的API,对自定义的code不支持,尤其像上面的有很多分支抛出多种不同异常码的情况。接下来我们看下Spock是如何解决的。...Spock静态方法测试 接下来,我们一起看下Spock如何扩展第三方PowerMock对静态方法进行测试。...@PowerMockRunnerDelegate(Sputnik.class)注解,交给Spock代理执行,这样既可以使用Spock + Groovy的各种功能,又可以使用PowerMock的对静态,final

    2.8K20

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

    我们可以来看接下来的场景:void方法,没有返回结果,如何写测试这段代码的逻辑是否正确? 如何确保单元测试代码是否执行到了for循环里面的语句,循环里面的打折计算又是否正确呢?...实际上StudentDTO.java 这个类并没有3个参数的构造方法,是Groovy帮我们实现的。Groovy默认会提供一个包含所有对象属性的构造方法。...ExpectedException的方式也只提供了expectMessage的API,对自定义的code不支持,尤其像上面的有很多分支抛出多种不同异常码的情况。接下来我们看下Spock是如何解决的。...Spock静态方法测试 接下来,我们一起看下Spock如何扩展第三方PowerMock对静态方法进行测试。...@PowerMockRunnerDelegate(Sputnik.class)注解,交给Spock代理执行,这样既可以使用Spock + Groovy的各种功能,又可以使用PowerMock的对静态,final

    3.3K20

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

    我们再深入分析每个阶段发现缺陷的成本,主要指从发现到解决问题所需的人力时间成本:需求分析阶段:如果设计评审发现不合理,可以选择不执行,仅需花费几个小时进行会议讨论。...可借鉴《代码整洁之道》中的技巧,关键是要确保测试用例易于理解。 不要盲目地追求覆盖率,而是要尽可能覆盖所有可能的场景。 单元测试要保持可用性,纳入持续集成/持续交付流程。...每个方法或类应只负责一项任务,这样测试用例只需关注当前方法的有效性,而不需要考虑方法之间的调用。每个测试用例也应只关注一件事情。...同时,Spock不仅局限于模拟(Mock),还提供各种高效的功能(这些是传统JUnit和Mockito无法实现的):Spy:可以对部分资源进行模拟,方便地对同一类内相互调用的方法进行模拟和验证。...基于数据驱动的测试:借助where关键词和数据表格的方式,在一个测试案例中验证要测试的参数和期望返回值的所有可能情况。可以方便地验证抛出的异常。

    12300

    Spock单元测试框架使用详解「建议收藏」

    Spock(Spock官网:http://spockframework.org/)作为java和Groovy测试一种表达的规范语言,其参考了Junit、Groovy、jMock、Scala等众多语言的优点...本文以实战的方式详解怎样使用Spock进行单元测试,以便更好地理解Spock单元测试,至少能够让读者能够在选择java单元测试面前多了一种选择。 1....Test类 BizServiceTest.groovy package com.lance.spock.demo.service.impl.groovy import com.lance.spock.demo.api.BizService...对象 /** * Spock和Junit类似也将单元测试划分成了多个阶段 * 如 setup() 类似于Junit的@Before,在这个方法中的代码块会在测试用例执行之前执行...id_1", "zhangsan", 28) then: PersonEntity 1 * dao.insert(person) //判断dao执行了一次

    2.7K20

    Spock测试框架实践(六)

    在上一次Spock实践中我们介绍了Spock的文档化测试和HTTP接口测试实践,今天我们用Spock做一些mock的实践。...对于测试来说,除了能够对输入-输出进行验证之外,还希望能验证模块与其他模块之间的交互是否正确,比如“是否正确调用了某个对象中的函数”;或者期望被调用的模块有某个返回值,等等。...各类mock框架让这类验证变得可行,而spock除了支持这类验证,并且做的更加优雅,下面我们看一下在Spock里mock的应用实践。...二、Stubbing 对mock对象定义函数的返回值可以用如下方法: subscriber.receive(_) >> "ok" 符号代表函数的返回值,执行上面的代码后,再调用subscriber.receice..."message1" ) then: 1 * subscriber.receive( "message1" ) 此时spock会对subscriber执行两次设定: 第一次设定receive(“message1

    1.8K20

    单元测试再出发

    单元测试是由软件开发人员编写和运行的自动化测试,以确保应用程序的一部分(称为单元)按预期工作。 单元是可以在系统中逻辑隔离的最小代码段。这可以是单个函数、方法、过程、模块、类或对象。...根据故障的严重程度,框架可能会停止后续测试。 单元测试还可以设置为在代码发布到暂存或生产环境之前在每个新构建上执行。通过这种方式,软件开发人员可以确保只有通过所有单元测试的代码才能进入实时环境。...有兴趣的同学看看旧文章: Maven和Gradle中配置单元测试框架Spock Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock数据驱动Demo 人生苦短?...希望了解单元提供哪些功能以及如何使用它的软件开发人员可以查看单元测试以获得对单元接口 (API) 的基本了解。 单元测试限制 尽管单元测试有很多好处,但它也有一些局限性。...单元测试不会捕获软件系统中的每个错误。除非它是一个非常简单的系统,否则很难评估软件系统中的每个执行路径。单元测试仅限于测试单元本身的功能。它不会捕获其他错误,例如集成错误或性能错误。

    46610

    FunTester原创文章(基础篇)

    -视频演示 模块类和自动化用例实践--视频演示 性能框架多线程基类和执行类--视频讲解 定时和定量压测模式实现--视频讲解 基于HTTP请求的多线程实现类--视频讲解 单元&白盒 Maven和Gradle...中配置单元测试框架Spock Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock数据驱动Demo 人生苦短?...Mac+httpclient高并发配置实例 单点登录性能测试方案 如何对消息队列做性能测试 如何对修改密码接口进行压测 如何对单行多次update接口进行压测 如何对多行单次update接口进行压测...如何获取JVM堆转储文件 性能测试中标记每个请求 如何对N个接口按比例压测 如何性能测试中进行业务验证 性能测试中记录每一个耗时请求 线程安全类在性能测试中应用 利用微基准测试修正压测结果 性能测试如何减少本机误差...主线程都结束了,为何进程还在执行 java测试框架如何执行groovy脚本文件 java用递归筛选法求N以内的孪生质数(孪生素数) 从JVM堆内存分析验证深浅拷贝 如何学习Java基础 如何保存HTTPrequestbase

    2.5K10
    领券