当前位置:网站首页>Spock单元测试框架介绍及在美团优选的实践_第二章(static静态方法mock方式)
Spock单元测试框架介绍及在美团优选的实践_第二章(static静态方法mock方式)
2022-07-08 00:53:00 【灰太狼yyds】
Spock单元测试框架介绍
文章目录
前言
什么是单元测试,其实单元测试是在我们开发完功能之后,对于业务逻辑用到了第三方的调用,或者对数据库的操作等动作不能够支持的情况下,对业务功能进行以方法为颗粒度进行测试业务逻辑是否与预期的效果数据相等。在很多的一线互联网公司研发人员开发完功能之后都要进行单元测试的,保证行覆盖率、分支覆盖率符合标注之后,才可以上线,以减少线上事故发生。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是Spock单元测试框架?
帮助大家提高开发测试效率。
Spock是什么?和JUnit、jMock有什么区别?
Spock是国外一款优秀的测试框架,基于BDD(行为驱动开发) 思想,功能强大,能够让我们的单元测试代码规范化,结构层次清晰。Spock结合Groovy动态语言的特点以及自身提供的各种标签
种通用、简单、结构化的描述语言,让编写测试代码更加高效和简洁,
官方的介绍如下:https://spockframework.org
二、使用步骤
1.引入maven依赖
<!-- spock单元测试框架 -->
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>2.0-groovy-3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>2.4.15</version>
</dependency>
2.创建GoodsService订单业务类进行单测
说明:
UserUtils.getUser()是个静态方法
3.创建Groovy.class类
new—>Groovy Class类
4.创建GoodsServiceSpec.java
创建GoodsServiceSpec类对,queryGoods()方法进行单元测试,命名严格要求:要测的类名+Spec
说明:
1、创建类之后需要继承extends Specification类
3、mock静态方法(ststic) 需要 setup()函数进行处理,返回需要的值即可。
4、创建测试方法格式如下
/** * 灰太狼永远吃不到羊 */
class ceshiSpec extends Specification{
def goodsService = new GoodsService()
/** * setup() 函数的意思是在测试类启动加载之前初始化静态资源 * @return */
def setup() {
new MockUp<UserUtils>() {
@Mock
static User getUser() {
return new User(login: "小新新")
}
}
}
def "queryGoods success"() {
given:"测试mock,UserUtils的getUser()静态方法"
and:"mock方法"
//when 标签代表要测试方法的入口,只能又一个方法
when:"测试方法"
def response = goodsService.queryGoods()
//then 对结果进行验证
then:"校验结果"
response.get(0) == "小新新"
}
}
实际效果与预期效果一致,表示测试通过。
实际效果与预期效果不一致,表示测试失败
5.groowy简单语法
where以标准格式开使提供集合
when调用指定方法函数
then: 故出断高裝达式
expect 期站的行为,shen-then的特点
giveni mock单测中指定mock数信
throwin:如果在when方法中地出现异常,则在这个子句中会捕玩到异常并返回
def setup{}:每个训过运行前的启动方法
der cleanup{}:每个加武运行居的清理万法
def setupSpec{}:每个测试前的启动方法
def cleanupSpec{}:服后一介测试运行后的消理方法
总结
以上就是今天要讲的内容,本文仅仅简单介绍了spock的使用,而spock提供了大量能使我们快速便捷地处理数据的函数和方法,后续我将Spock对于异常、void方法场景经典测试的案例,敬请期待!。
边栏推荐
- PHP calculates personal income tax
- 《ClickHouse原理解析与应用实践》读书笔记(7)
- 魚和蝦走的路
- The generosity of a pot fish
- 力扣6_1342. 将数字变成 0 的操作次数
- Analysis ideas after discovering that the on duty equipment is attacked
- 企业培训解决方案——企业培训考试小程序
- Leetcode featured 200 channels -- array article
- From starfish OS' continued deflationary consumption of SFO, the value of SFO in the long run
- Keras深度学习实战——基于Inception v3实现性别分类
猜你喜欢
科普 | 什么是灵魂绑定代币SBT?有何价值?
力争做到国内赛事应办尽办,国家体育总局明确安全有序恢复线下体育赛事
Ml backward propagation
OpenGL/WebGL着色器开发入门指南
进程和线程的退出
Disk rust -- add a log to the program
[reinforcement learning medical] deep reinforcement learning for clinical decision support: a brief overview
See how names are added to namespace STD from cmath file
谈谈 SAP iRPA Studio 创建的本地项目的云端部署问题
云原生应用开发之 gRPC 入门
随机推荐
阿南的判断
金融业数字化转型中,业务和技术融合需要经历三个阶段
JVM memory and garbage collection-3-direct memory
leetcode 866. Prime Palindrome | 866. prime palindromes
微信小程序uniapp页面无法跳转:“navigateTo:fail can not navigateTo a tabbar page“
Introduction to ADB tools
Neural network and deep learning-5-perceptron-pytorch
Common disk formats and the differences between them
数据链路层及网络层协议要点
Alo who likes TestMan
《通信软件开发与应用》课程结业报告
Matlab r2021b installing libsvm
Monthly observation of internet medical field in May 2022
生命的高度
How does the bull bear cycle and encryption evolve in the future? Look at Sequoia Capital
电路如图,R1=2kΩ,R2=2kΩ,R3=4kΩ,Rf=4kΩ。求输出与输入关系表达式。
Why did MySQL query not go to the index? This article will give you a comprehensive analysis
Anan's judgment
metasploit
阿锅鱼的大度