spock是一款全能型的单元测试框架。

上次文章分享了spock框架的基础功能的使用,在此基础上,我根据自己写的Groovy的封装方法、数据驱动以及一些Groovy的高级语法做了一些尝试。发现还是有一点点问题,不知道是不是因为我本身是Java和Groovy混编的项目导致的,不过也都有了解决方案。

分享代码,供各位参考:

package com.FunTester.spock.pratice

import com.fun.config.PropertyUtils
import com.fun.frame.SourceCode
import org.slf4j.Logger
import spock.lang.Shared
import spock.lang.Specification import static com.fun.config.Constant.EMPTY
import static com.fun.config.Constant.getLongFile
import static com.fun.frame.Output.output
import static com.fun.frame.SourceCode.* class Test02 extends Specification { @Shared
def properties = PropertyUtils.getLocalProperties(getLongFile("1")) @Shared
def cc = Arrays.asList(properties.getArrays("c")).stream().map {x -> Integer.valueOf(x)}.collect() as List @Shared
def bb = Arrays.asList(properties.getArrays("b")).stream().map {x -> Integer.valueOf(x)}.collect() as List @Shared
def aa = Arrays.asList(properties.getArrays("a")).stream().map {x -> Integer.valueOf(x)}.collect() as List @Shared
Logger logger = getLogger(Test02.class.getName()) def setup() {
logger.info("测试方法开始了")
} def cleanup() {
logger.info("测试方法结束了")
} def setupSpec() {
logger.info("测试类[${getClass().getName()}]开始了")
} def cleanupSpec() {
logger.info("测试类[${getClass().getName()}]结束了")
} def "测试数据驱动Demo"() {
given:
int c = 0 expect:
10 == a + b + c where:
a | b
1 | 9
8 | 2
} def "测试数据读写完成数据驱动"() {
given:
def a = 0
def arrays = properties.getArrays("id")
def s1 = properties.getPropertyInt("size1")
def s2 = properties.getPropertyInt("size2")
def list = Arrays.asList(arrays).stream().filter {x -> x.length() > 1}.collect() as List expect:
s1 == arrays.size()
s2 == list.size()
} def "测试自定义对象操作"() {
given: "给一个自定义对象"
def per = new Per()
per.age = 23
per.name = "FunTester"
def a = per expect:
a.name == "FunTester" } def "线程安全测试"() {
given: "多线程支持测试,此处线程数改成很大之后效果比较明显"
range(2).forEach {new Per().start()}
sleep(1000)
output(Per.i)
expect:
4 == Per.i
} def "测试集合验证使用数据驱动"() {
given: "此处写的无法被where使用" expect:
c * c == a * a + b * b where:
c << cc
b << bb
a << aa
} def "测试数组0..10方式是否可用"() {
expect:
true == SourceCode.isNumber(x + EMPTY) where: "需要用括号,不然会报错"
x << (0..5) } def "测试lambda写法是否可用"() {
given:
def collect = range(10).filter {x -> x % 2 == 1}.collect() as List expect:
collect.size() == 5
collect.contains(3)
collect.contains(5)
} /**
* 测试类
*/
class Per extends Thread { static int i @Override
public void run() {
i++
sleep(100)
i++
} Per() {
} Per(String name, int age) {
this()
this.name = name
this.age = age
} String name int age static def getAll() {
i
} } }

下次我会针对自己写的工具类和封装的请求对象进行一些spock方面的代码演示,欢迎各位关注。

技术类文章精选

非技术文章精选

Groovy单元测试框架spock数据驱动Demo的更多相关文章

  1. Groovy单元测试框架spock基础功能Demo

    spock是一款全能型的单元测试框架. 最近在做单元测试框架的调研和尝试,目前确定的方案框架包括是:spock,Junit,Mockito以及powermock.由于本身使用Groovy的原因,比较钟 ...

  2. Maven和Gradle中配置单元测试框架Spock

    Maven Maven本身不支持其他JVM语言(例如Groovy或Scala).要在Maven项目中使用它,需要使用第三方插件.对于Groovy而言,最好的选择似乎是GMavenPlus(重写不再维护 ...

  3. TestNg JAVA 自动化单元测试框架Demo

    TestNg TestNg 是java的一个自动化单元测试框架 参考:http://testng.org/doc/index.html 环境准备 既然是java 的自动化单元测试框架,就必须要有jav ...

  4. Python Unittest 自动化单元测试框架Demo

    python 测试框架(本文只涉及 PyUnit) https://wiki.python.org/moin/PythonTestingToolsTaxonomy 环境准备 首先确定已经安装有Pyth ...

  5. Java单元测试框架 JUnit

    Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一 ...

  6. JavaScript单元测试框架-Jasmine

    Jasmine的开发团队来自PivotalLabs,他们一开始开发的JavaScript测试框架是JsUnit,来源于著名的JAVA测试框架JUnit.JsUnit是xUnit的JavaScript实 ...

  7. unittest单元测试框架实现参数化

    当我们在使用TestNG时,发现它有一个非常好用的参数化功能.当你的测试用例有固定的参数和断言结果时,它可以相似用例的节省用例的个数. 例子如下: import static org.testng.A ...

  8. 简单易懂的单元测试框架-gtest(一)

    简介     gtest是google开源的一个单元测试框架,以其简单易学的特点被广泛使用.该框架以第三方库的方式插入被测代码中.同其他单元测试框架相似,gtest也通过制作测试样例来进行代码测试.同 ...

  9. python之使用单元测试框架unittest执行自动化测试

    Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 单元测试框架即一堆工具的集合. 在说unittest ...

随机推荐

  1. 线程池和lambda表达式

    线程池1.什么是线程池.一个用来创建和管理线程的容器;2.线程池的作用.提高线程的复用性,降低资源消耗提高线程的响应速度,提高线程的可管理性3.线程的核心思想;线程的复用 4.线程池的创建Execut ...

  2. SpringMVC流程源码分析及DispatcherServlet核心源码

    一.源码分析前还是需要一张流程图作为指导,如下: 二.简单介绍以及源码定位 DispatcherServlet其实就是一个HttpServlet,他是HttpServlet的子类,所以它和普通的Htt ...

  3. linux下mqtt-client

    CPATH += ../embe_mqtt/MQTTClient/srcPSRTPATH = ../embe_mqtt/MQTTPacket/src LOADPATH += -I$(CPATH)LOA ...

  4. POJ 3080 Blue Jeans(串)

    题目网址:http://poj.org/problem?id=3080 思路: 以第一个DNA序列s为参考序列,开始做以下的操作. 1.将一个字母s[i]作为匹配串.(i为当前遍历到的下标) 2.遍历 ...

  5. MFC中如何分割CString类型的数据

    [才疏学浅,难免有纰漏,若有不正确的地方,欢迎指教] MFC中有一个库函数 Tokenize(); 函数原型:CStringT Tokenize( PCXSTR pszTokens , int& ...

  6. EFK教程 - EFK快速入门指南

    通过部署elasticsearch(三节点)+filebeat+kibana快速入门EFK,并搭建起可用的demo环境测试效果 作者:"发颠的小狼",欢迎转载与投稿 目录 ▪ 用途 ...

  7. 设计模式(二十二)Command模式

    一个类在进行工作时会调用自己或者是其他类的方法,虽然调用结果会反映在对象的状态中,但并不会留下工作的历史记录. 这时,如果我们有一个类,用来表示“请进行这项工作”的“命令”就会方便很多.每一项想做的工 ...

  8. 原版_打字游戏.html

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. vim配置(vimplus)教程及问题

    An automatic configuration program for vim 安装(github地址:https://github.com/chxuan/vimplus.git, 欢迎star ...

  10. Android原生PDF功能实现

    1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示. 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的 ...