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

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

使用Spock解决单元测试开发中的痛点 4. Mock模拟 5. 异常测试 6. Spock静态方法测试 7. 动态Mock静态方法 8. 覆盖率 9. DAO层测试 作者简介 1....服务与服务之间通常都是通过接口的方式进行交互。即使同一个服务内也会分为多个模块,业务功能需要依赖下游接口的返回数据,才能继续后面的处理流程。...所以正常的做法是把studentDao的getStudentInfo()方法Mock掉,模拟一个指定的值,因为我们真正关心的是拿到students自己代码的逻辑,这是需要重点验证的地方。...Spock内置thrown()方法,可以捕获调用业务代码抛出的预期异常验证,再结合where表格的功能,可以很方便地覆盖多种自定义业务异常,代码如下: @Unroll def "validate...标签里用到了Spock的thrown()方法,这个方法可以捕获我们要测试的业务代码里抛出异常

2.7K20

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

使用Spock解决单元测试开发中的痛点 4. Mock模拟 5. 异常测试 6. Spock静态方法测试 7. 动态Mock静态方法 8. 覆盖率 9. DAO层测试 作者简介 1....服务与服务之间通常都是通过接口的方式进行交互。即使同一个服务内也会分为多个模块,业务功能需要依赖下游接口的返回数据,才能继续后面的处理流程。...所以正常的做法是把studentDao的getStudentInfo()方法Mock掉,模拟一个指定的值,因为我们真正关心的是拿到students自己代码的逻辑,这是需要重点验证的地方。...Spock内置thrown()方法,可以捕获调用业务代码抛出的预期异常验证,再结合where表格的功能,可以很方便地覆盖多种自定义业务异常,代码如下: @Unroll def "validate...标签里用到了Spock的thrown()方法,这个方法可以捕获我们要测试的业务代码里抛出异常

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

Spock测试框架实践(六)

对于测试来说,除了能够对输入-输出进行验证之外,还希望能验证模块与其他模块之间的交互是否正确,比如“是否正确调用了某个对象中的函数”;或者期望被调用的模块有某个返回值,等等。...各类mock框架让这类验证变得可行,而spock除了支持这类验证,并且做的更加优雅,下面我们看一下Spock里mock的应用实践。...publisher.subscribers.add(subscriber) publisher.subscribers.add(subscriber2) } } 而创建了mock对象之后就可以对它的交互验证了...object 1 * _ // shortcut for and preferred over the above 得益于groovy脚本语言的特性,定义交互的时候不需要对每个参数指定类型...如果要每次调用返回不同结果,可以使用: subscriber.receive(_) >>> [ "ok" , "error" , "error" , "ok" ] 如果要做额外的操作,如抛出异常,可以使用

1.7K20

2018 年你不能错过的 Java 类库

各位读者好, 这篇文章是我看过 Andres Almiray 的一篇介绍文,整理出来的。 因为内容非常好,我便将它整理成参考列表分享给大家, 同时附上各个库的特性简介和示例。 请欣赏!...@NonNull - 或:我如何学会不再担心并爱上了非空异常(NullPointerException)。 @Cleanup - 自动的资源管理:安全调用你的close() 方法,无需任何麻烦。...@SneakyThrows - 以前没有人抛出检查型异常的地方大胆的抛出吧! @Synchronized - 正确的实现同步:不要暴露你的锁。...class HelloSpockSpec extends spock.lang.Specification { def "length of Spock's and his friends' names...body内容的模式 请求验证 单元测试里运行,但是是作为一个对立的进程或者一个WAR应用的形式 可通过流畅的Java API、JSON文件和基于HTTP的JSON进行配置 对stub的录制/回放 故障注入

83420

2017 年你不能错过的 Java 类库

各位读者好, 这篇文章是我看过 Andres Almiray 的一篇介绍文,整理出来的。 因为内容非常好,我便将它整理成参考列表分享给大家, 同时附上各个库的特性简介和示例。 请欣赏!...@NonNull - 或:我如何学会不再担心并爱上了非空异常(NullPointerException)。 @Cleanup - 自动的资源管理:安全调用你的close() 方法,无需任何麻烦。...@SneakyThrows - 以前没有人抛出检查型异常的地方大胆的抛出吧! @Synchronized - 正确的实现同步:不要暴露你的锁。...class HelloSpockSpec extends spock.lang.Specification { def "length of Spock's and his friends' names...内容的模式 请求验证 单元测试里运行,但是是作为一个对立的进程或者一个WAR应用的形式 可通过流畅的Java API、JSON文件和基于HTTP的JSON进行配置 对stub的录制/回放 故障注入 针对每个请求的根据条件进行代理

99780

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

A/B测试策略控制新功能流量比例,经过稳定运行一段时间无异常,逐步放开全部流量。...异常情况包括: 外部异常:依赖(内部或外部接口、数据库环境等)抛出异常将如何处理;内部异常:代码本身抛出RuntimeException的后果。...同时,Spock不仅局限于模拟(Mock),还提供各种高效的功能(这些是传统JUnit和Mockito无法实现的):Spy:可以对部分资源进行模拟,方便地对同一类内相互调用的方法进行模拟验证。...Mock:对依赖资源进行模拟,同时验证依赖资源被调用的次数。例如,测试Redis写功能时,可以模拟Redis客户端,验证传入方法的参数是否符合预期,以及验证Redis写入方法被调用的次数。...基于数据驱动的测试:借助where关键词和数据表格的方式,一个测试案例中验证要测试的参数和期望返回值的所有可能情况。可以方便地验证抛出异常

5900

dotnet core MAC 系统下删除应用程序自己调 Process Start 方法将会抛出 Win32 异常

MAC 系统下,如果在运行过程中,应用程序的文件被删除了,那么此时如果应用程序执行了 Process.Start 方法时,将会抛出 Win32Exception 异常 我写了一个工具 dotnetCampus.UpdateAllDotNetTools...更新 dotnetCampus.UpdateAllDotNetTools 到最新版本之后,其他的 dotnet tool 就都不能更新了,将会抛出 Win32Exception 异常,如下图 ?...因此第一步就是获取当前进程所在的文件 .NET 开源代码里面,可以 src\libraries\System.Diagnostics.Process\src\System\Diagnostics\...这是一个获取传入的进程号拿到对应的文件路径的方法,如果传入的进程号对应的文件被删除了,那么将会抛出 Win32Exception 异常 System.ComponentModel.Win32Exception...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改的作品务必以相同的许可发布。

79030

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

各位读者好, 这篇文章是我看过 Andres Almiray 的一篇介绍文,整理出来的。 因为内容非常好,我便将它整理成参考列表分享给大家, 同时附上各个库的特性简介和示例。 请欣赏!...Retrofit JDeferred RxJava MBassador Lombok项目 Java简单日志门面(SLF4J) JUnitParams Mockito Jukito Awaitility Spock...@SneakyThrows - 以前没有人抛出检查型异常的地方大胆的抛出吧! @Synchronized - 正确的实现同步:不要暴露你的锁。...Awaitility是一个领域专用语言,可以允许你以一种简洁且易读的方式来表达异步系统的各种期望结果。 ? GitHub,入门, 用户指南 Spock 企业级的测试和规范框架。 ?...GitHub, Website WireMock 用于模拟HTTP服务的工具 对HTTP响应进行打桩,可以匹配URL、header头信息和body内容的模式 请求验证 单元测试里运行,但是是作为一个对立的进程或者一个

1.6K20

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

使用spock进行单元测试时,有如下情景,分别可使用stub和mock。 使用stub测试桩 如果我们需要测试A方法,但是E方法目前还没办法调用,或者还没开发完成。..."ok" : "fail" } 如果想调用方法抛出异常 subscriber.receive(_) >> { throw new InternalError("ouch") } 链式生成返回值 subscriber.receive..., "fail", "ok"] >> { throw new InternalError() } >> "ok" 上面代码中,方法被调用的前三次分别返回 “ok”, “fail”, “ok”,第四次会抛出异常...使用mock测试桩 mock测试桩就是模拟一个测试的结果。如下图,A类调用类B和C类的某个方法: ?...-2.html 以上是spock中mock测试桩的使用场景,总结为一句就是: mock测试桩给被测试方法模拟一个预期的效果。

3.8K50

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

expect 的语法意义就是 expect 的块内,所有表达式成立则验证通过,反之有任一个不成立则验证失败。这里引入了一个块的概念。怎么理解 spock 的块呢?...这里有点类似我们 mybatis 或者一些模板引擎中使用的方法。# 号拼接声明的变量就可以了,执行结果如下。 这下更清晰了。...3.3.6 验证整数除操作 - when - then 我们都知道一个整数除以0 会有抛出一个『/ by zero』异常,那么如果断言这个异常呢。...比如上面的代码说明了,当执行了 Calculator.divideInt(1, 0) 的操作,就一定会抛出 ArithmeticException 异常,并且异常信息是 / by zero。...4.2 参考文档 本文瞻仰了如下博主的精彩博文,再加上自身的学习总结加工而来,如果本文在看的时候有不明白的地方可以看一下下方链接。

1.3K30

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

单元测试通过对程序中每个部分进行独立的测试覆盖,且每次代码更新自动执行,保证了新的修改不会影响到旧的功能。...expect 关键字让我们能够实现最简单的验证,如果传递参数 1 和 2,返回值不为 3,则这条测试用例就会执行失败。...4.5. when then — 进阶的测试场景 有些测试场景使用 expect 很难实现,例如我们预期函数抛出异常的操作,此时可以通过 when then 块来实现。...Mock 测试通过模拟外部调用的结果,让我们的测试程序得以继续运行, JUnit 中,我们需要使用 Mockit 来实现接口的 Mock,同时,Mock 的编写也较为复杂,这些 spock 中就显得非常简单了...公共方法 JUnit 有一个很方便的功能,那就是可以定义每个测试方法开始前与结束调用的方法,以便做一些公共的自动处理功能,spock 也提供了相应的机制: 方法 说明 setup() 每个方法执行前调用

1.2K20

2017 年你不能错过的 Java 类库

各位读者好, 这篇文章是我看过 Andres Almiray 的一篇介绍文,整理出来的。 因为内容非常好,我便将它整理成参考列表分享给大家, 同时附上各个库的特性简介和示例。 请欣赏!...@SneakyThrows - 以前没有人抛出检查型异常的地方大胆的抛出吧! @Synchronized - 正确的实现同步:不要暴露你的锁。...GitHub,入门, 用户指南(https://github.com/awaitility/awaitility/wiki/Usage) Spock 企业级的测试和规范框架。 ?...内容的模式 请求验证 单元测试里运行,但是是作为一个对立的进程或者一个WAR应用的形式 可通过流畅的Java API、JSON文件和基于HTTP的JSON进行配置 对stub的录制/回放 故障注入 针对每个请求的根据条件进行代理...针对请求的检查和替换进行浏览器的代理 有状态的行为模拟 可配置的响应延迟 ?

1.5K10

「React进阶」深度剖析 React 异步组件前世与今生

二 初识:异步组件 1 什么是异步组件 我们先来想想目前的React应用中使用ajax或者fetch进行数据交互场景,基本上就是这样的,类组件中componentDidMount和函数组件effect...中进行数据交互,得到数据,再渲染UI视图。...如果某个组件定义了 componentDidCatch,那么这个组件中所有的子组件渲染过程中抛出异常时,这个 componentDidCatch 函数就会被调用。...,那就直接返回结果;还有一种可能是异步操作还没有结束,数据没有就绪,这时候 createFetcher 会抛出一个“异常”。...获取这个异常之后干什么呢? 我们知道这个异常是Promise,那么接下来当然是执行这个Promise,成功状态,获取数据,然后再次渲染组件,此时的渲染就已经读取到正常的数据,那么可以正常的渲染了。

1.6K30

FunTester原创文章(基础篇)

Groovy单元测试框架spock基础功能Demo Groovy单元测试框架spock数据驱动Demo 人生苦短?...性能测试中记录每一个耗时请求 线程安全类性能测试中应用 利用微基准测试修正压测结果 性能测试如何减少本机误差 服务端性能优化之异步查询转同步 服务端性能优化之双重检查锁 多种登录方式定量性能测试方案...性能测试中图形化输出测试数据 压测中测量异步写入接口的延迟 手机号验证码登录性能测试 绑定手机号性能测试 终止性能测试并输出报告 CountDownLatch类性能测试中应用 CyclicBarrier...如何使用“dd MM”解析日期 Java和Groovy正则使用 运行越来越快的Java热点代码 6个重要的JVM性能参数 ArrayList浅、深拷贝 Java性能测试中两种锁的实现 测试如何处理Java异常...创建Java守护线程 Lambda表达式在线程安全Map中应用 Java程序是如何浪费内存的 Java中的自定义异常 Java文本块 CountDownLatch类性能测试中应用 Java压缩/解压缩字符串

2.5K10

微服务架构之Spring Boot(六十七)

一种方法允许您在必要 时使用 @Import 注释在其中一个测试中启用它。 混淆的另一个原因是类路径扫描。假设您以合理的方式构建代码,则需要扫描其他包。...如果这不是您的选项,您可以测试的层次结构中的某处创建一个 @SpringBootConfiguration ,以便使用它。或者,您可以为 测试指定源,这会禁用查找默认源的行为。...45.3.24使用Spock测试Spring Boot应用程序 如果您希望使用Spock来测试Spring Boot应用程序,您应该将Spockspock-spring 模块的依赖项添加到您的应用程序的构建...spock-spring 将Spring的测试框架集成到Spock中。建议您使用Spock 1.2或更高版本从Spock的Spring框架和Spring Boot集成的许多改 进中受益。...您可以获得一个vanilla模板或一个发送基本HTTP身份验证(使 用用户名和密码)的模板。在任何一种情况下,模板都以一种测试友好的方式运行,不会在服务器端错误上抛出异常

55720

SpringBoot中使用异步方法优化Service逻辑,提高接口响应速度

异步方法适用于逻辑与逻辑之间可以相互分割互不影响的业务中, 如生成验证码和发送验证码组成的业务, 其实无需等到真正发送成功验证码才对客户端进行响应, 可以让短信发送这一耗时操作转为异步执行, 解耦耗时操作和核心业务...AsyncTestController { @Autowired private ArticleServiceImpl articleService; /** * 模拟获取文章阅读量...如何获取(有返回值)异步方法的返回值 使用Future类及其子类来接收异步方法返回值 注意: 无返回值的异步方法抛出异常不会影响Controller的主要业务逻辑 有返回值的异步方法抛出异常会影响Controller...异步方法带来的问题/拓展 异步方法只能声明Service方法中Controller直接调用才会生效, 异步方法被同级Service方法调用不会生效, 很奇怪? 异步方法 + 事务能顺利执行吗?...或许事务操作应该和异步操作分离开, 被Controller层调用时事务操作在前, 异步操作在后 异步方法执行失败对Controller前半部分的非异步操作无影响, 因此说异步方法整个业务逻辑中不是100%

33520
领券