UT in groovy
前言 UT(unit test)在软件开发中扮演着非常关键的作用,以前和朋友聊天时也有讨论过UT,但似乎对UT的重要性并没有那么强烈的认知。从我个人经验讲,我本人是从事java后端开发的工作,刚开始和很多人的认识一样,把UT看成一种应付,因为很多公司都特别强调UT覆盖率,我也见过很多团队为了应付老板制定的指标而一段时间内专门补UT,但是我认为对软件的最终质量并没有什么效果。 个人认为,关于UT存在以下事实与谬误: 前言讲述了UT的事实与谬误,希望更多的同行能从根本上意识到UT的重要性。言归正传,这次我主要希望与大家分享基于Groovy的UT。写过java的想必都应该使用过junit测试框架,那今天我给大家介绍另外一种基于groovy的框架Spock框架。其中的简洁强大在下面的介绍中自会体悟到。 一:Spock项目搭建。 //引入框架对应的pom文件
<dependency>
<groupId>com.dianping.spc</groupId>
<artifactId>spc-common</artifactId>
<version>0.4.1</version>
</dependency>
//新建Spock项目
class SpockTest extends Specification {
/** code section */
}
二.成员变量的声明及初始化 //声明成员变量
TestAction testActionStub //目标测试类
TestService testServiceMock//目标测试类依赖的外部服务
//初始化工作
void setup() {
testServiceMock = Mock()//不关心外部服务的实现,因此直接使用Mock
tealSaleActionStub = [] //相当于new了一个对象
testActionStub.testService = testServiceMock
}
三.新建测试实例 @Unroll
def "testFun"(Integer param1,Integer param2,String param3) {
/** *1.given部分用于测试用例运行之前初始化运行信息 */
given:
//case1.初始化静态类的方法
StaticClass.staticFun() >>Mock(String)
ActionContext.getContext() >>Mock(ActionContext)
//case2.mock父类的方法
testActionStub.metaClass.fatherFun = {
if (param1 <= 0) {
return 0
} else {
return param1
}
}
//case3.mock远程的方法
testServiceMock.mockFun(_ as Long) >> { Long s ->
}
testServiceMock.mockFun(_) >> {}
testServiceMock.mockFun(_ as List,_,_)>> {List i ->
def list = i[0]
if(list[0] == 1) {
[1]
}
}
/** *2.expect:待测试方法 */
expect:
size == testActionStub.fun1().size()
title == testActionStub.fun1().get(2).title
/** *3.where:期望的输入和输出 */
where:
param1 | param2 | param3
1 | 3 | "团购立减"
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |