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

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

最近的一边学习一边复习的过程中,发现了很多有意思的事情。今天就分享一个groovy.lang.MetaClass应用:如何运行中,动态给类和对象增加属性和添加方法。...,工作目录:/Users/oker/IdeaProjects/funtester/,系统编码格式:UTF-8,系统Mac OS X版本:10.16 INFO-> main 我是测试方法:static.test...-> logger.warn("设置" + x) fun.metaClass.setProperty("name", x) return...FAILED INFO-> Test worker 测试类[com.funtest.spock.Mop]开始了 INFO-> Test worker 测试方法开始了 INFO-> Test worker...]结束了 Mop > 测试动态添加对象方法 PASSED Mop > 测试动态添加静态方法 PASSED Mop > 测试动态添加获取属性 > com.funtest.spock.Mop.测试动态添加获取属性

91760

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

+,Spock自带的Mock和Spy足够好了,对于对象行为的模拟满足绝大部分场景,但是涉及静态方法模拟时候存在局限性,所以引入Mockito和PowerMock来实现设计静态方法的测试模拟场景。...这里不是很建议import static ,因为可能出现混用以及不易排查的问题。 由于目前测试中没有遇到使用Spy放行的逻辑,所以均使用Mock模式,需要对Mock对象的方法进行模拟。...统一使用Spock提供的功能,用到的注解@Shared,不加的话无法Spock方法中进行赋值操作,但是可以当做一个普通的对象使用。...Mockito模拟对象行为 Mockito和PowerMock配合使用语法稍微复杂一些。...,包括通过Mock对象创建的对象方法中,如果调用到定义过行为的方法,也会走自定义的逻辑。

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

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

Spock是一个Java和Groovy应用的测试和规范框架。之所以能够众多测试框架中脱颖而出,是因为它优美富有表现力的规范语言。...def studentDao = Mock(StudentDao) 这一行代码使用Spock自带的Mock方法,构造一个studentDao的Mock对象,如果要模拟studentDao方法的返回,只需...因为Spock使用Groovy作为单元测试开发语言,所以代码量比使用Java写的会少很多,比如given模块里通过构造函数的方式创建请求对象。...而且调用方式可以指定属性名,类似于key:value的语法,非常人性化,方便在属性多的情况下构造对象,如果使用Java写,可能就要调用很多的setXxx()方法,才能完成对象初始化的工作。...使用Spock的Mock模拟convert()方法调用,orderMapper.convert(_) >> order,再结合where表格,实现动态Mock接口的功能。

3.1K20

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

Spock是一个Java和Groovy应用的测试和规范框架。之所以能够众多测试框架中脱颖而出,是因为它优美富有表现力的规范语言。...def studentDao = Mock(StudentDao) 这一行代码使用Spock自带的Mock方法,构造一个studentDao的Mock对象,如果要模拟studentDao方法的返回,只需...因为Spock使用Groovy作为单元测试开发语言,所以代码量比使用Java写的会少很多,比如given模块里通过构造函数的方式创建请求对象。...而且调用方式可以指定属性名,类似于key:value的语法,非常人性化,方便在属性多的情况下构造对象,如果使用Java写,可能就要调用很多的setXxx()方法,才能完成对象初始化的工作。...使用Spock的Mock模拟convert()方法调用,orderMapper.convert(_) >> order,再结合where表格,实现动态Mock接口的功能。

2.7K20

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

java 中的 spock 正是凭借这样的理念诞生的一种测试框架。...,动态语言往往因为其过度的灵活性造成项目成员编码风格多样难以维护,但对于单元测试这样追求便捷与高效的场景来说,动态语言相较于 java 则更加游刃有余,同时,groovy 兼容 java 语法,可以直接调用...spock 框架也提供了批量测试拆分的机制,只要在方法加上 @Unroll 注解,多个测试用例就会在结果中被分开展示了。...@Timeout — 测试超时 方法添加 @Timeout 注解,可以实现测试用例超时的指定。...Mock 测试通过模拟外部调用的结果,让我们的测试程序得以继续运行, JUnit 中,我们需要使用 Mockit 来实现接口的 Mock,同时,Mock 的编写也较为复杂,这些 spock 中就显得非常简单了

1.2K20

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

我觉得有以下几点:第一,他可以用更少的代码去实现单元测试,让你可以更加专注于去验证结果不是写单测代码的过程。那么他又是如何做到少写代码这件事呢?原来他使用一种叫做 groovy 的魔法。...可以简单的理解成跑 jvm 的 python 或 js。...所以单测类的后缀不是 .java .groovy 。千万不要创建成普通 java 类了。否则创建没有问题,但是写一些 groovy 语法会报错。...html 的标签的范围是两个标签之间, spock 更简洁一点,从这个标签开始到下一个标签开始或代码结束的地方,就是他的范围。...因为 userDao 这个对象是我们 mock 出来的,他就是一个假对象,为了让后续流程按我们的想法进行,我可以通过『 >>』 让 spock 模拟返回指定数据。

1.3K30

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

前面讲了Spock框架Mock对象、方法经验总结,今天分享一下Spock框架中Mock静态资源的实践经验汇总。分成「静态资源」和「混合场景」。...HttpBase.fetchServiceNames()).thenReturn(["service-prod", "api-pro", "prod", "service-prd", "write-pro"]) 定义静态方法行为和非静态方法行为,语法是一致的...原因之前提过,主要是因为增加了类注解之后,Spock和Mockito一的Mock对象和定义方法的功能会无法运行,这个没找到具体的文档做出区分,所以如果遇到混合场景,建议使用PowerMock进行对象的Mock...使用语法,就是混合了PowerMock处理静态和非静态资源,以及行为模拟的语法。...高版本的依赖mockito-inline中,也是支持对静态类和静态方法的Mock的,但在Spock中极难使用,资料说是因为项目pom中的Spock版本与Mockito版本不一致导致的,尝试了几个组合依然无法解决

1.5K30

Spock 2.0 M1版本初探

这是2.x的第一个(预)发行版,未完成API,旨在收集与内部Spock迁移到JUnit Platform有关的用户反馈。...由JUnit Platform提供支持 Spock 2.0 M1的主要变化是向JUnit 5的迁移(确切地说,是使用JUnit Platform 1.5(是JUnit 5的一部分不是JUnit 4运行器...) 并通过JUnit平台激活测试执行: test { useJUnitPlatform() } 另一方面,对于Maven,仍然需要切换到Never Spock版本: ...但是,那太好了,目前还没有办法 “滚动”特定的测试,如Spock 1.xspock-global-unroll所知。...由于许多Spock测试仅适用于Groovy 3(特别是某些极端情况),因此特别不方便。Spock 2发行版之前可能会被调整为Groovy 3中的更改已提供兼容性,或者至少会取消上述硬性限制。

1.2K20

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

测试方法的生命周期 junit使用时,主要用以下注解来标记测试类的方法: @Test :标记需要运行的测试方法,一个测试类中可以有多个@Test方法; @Before/@After :标记的方法,会在每个测试方法运行之前...(x, y) where: "校验结果" x | y || z 1 | 0 || 1 2 | 1 || 3 } expect 为核心的测试校验语句块。...以上测试方法的语义为:z是由x和y经过方法plus()运算后得到的结果,现在分别列出了两组x,y,z的值,来测试这个关系是否满足。 由于有两个测试用例,所以plus()方法会在这里运行两次。...6.with()和verifyAll() 取对象属性的值 def "test person use with(p)"() { given: "init a person"...private String name private int age private Date birthday } with()和verifyAll()传入对象

3.6K31

Java反射——内省(Introspector)以及BeanUtils内省框架

既然内省是专门用于操作java对象属性的,那首先得搞懂什么是对象的属性 1、什么是java对象的属性呢? 说到属性,大家觉得很熟悉,属性不就是类里最上边的那些全局变量吗?...刚才说的 private String name;private int age; 准确的来说它们应该称为:字段,不是咱们所说的属性 那什么才是属性?...pd.getName()); } } } 从运行结果上来看,一共得到了5个属性,除了name,age,birthday 外还打印出了abc 上边的代码验证了咱们刚才说的:“属性其实是set、get方法”,不是类上边的那些字段...getName方法 (2).BeanUtils.setProperty(s, “name”, “王五”);//调用setName方法 代码操作一下 package com.cj.study.introspector...= BeanUtils.getProperty(s, "name");//调用getName方法 System.out.println(str); //设置值 BeanUtils.setProperty

35210

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

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

3.9K50

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

不是关注TDD,BDD或任何测试方法,但在最低级别,您必须编写代码来自动测试代码。...本文中,我将分享10个最好的和必不可少的 工具, 框架和库,它们可以帮助Java开发人员各种Java项目编写单元测试和集成测试。 1. JUnit 我不认为JUnit需要任何介绍。...我最喜欢的模拟框架是Mockito,但如果你愿意,你也可以探索PowerMock或JMock。 6. Spock框架 Spock是 Java和 Groovy应用程序的另一个测试和规范框架。...Spring Test Spring MVC带有一个非常有用的测试框架,允许不涉及 Web容器的 情况下进行深入测试。 它是向Spring应用程序编写自动化测试的最有用的库之一。...还有一个Spring Test DbUnit将Spring Test框架与DbUnit和Spring Test MVC HtmlUnit集成在一起,它将Spring Test MVC框架与HtmlUnit

2.3K50
领券