起因
刷题的时候,写完了代码,总是需要有单元测试验证自己的代码对不对。以前的我比较蠢,实在main方法里面测试我写的逻辑对不对的。这种写法,耗时不说,一个类里面只能有一个main方法,导致我写另外一题时,就把上一题的单元测试数据丢了,这样很不好。所以推荐下大家用spock做单元测试。
spock的pom文件导入
org.spockframework
spock-core
1.1-groovy-2.4
test
org.codehaus.groovy
groovy-all
2.4.15
单元测试流程
文章图片
在test目录下面,创建groovy文件,我创建了一个SolutionTest
文章图片
此类需要继承spock的基类Specification,才能有后续的处理功能
文章图片
全局创建要测试的对象,用def创建测试方法,在里面写测试逻辑即可
文章图片
运行后会输出测试用例的运行结果
spock语法介绍
文章图片
一个spock方法由四部分组成
- 变量字段:全局定义下测试方法里面需要频繁用到的对象,属性
- 测试模板方法:测试方法运行前和运行后执行的方法
def setupSpec() {}// runs once -before the first feature method
def setup() {}// runs before every feature method
def cleanup() {}// runs after every feature method
def cleanupSpec() {}// runs once -after the last feature method
- 测试方法:我们要测试的代码的主体
- 测试帮助方法:没怎么用过
def "test count"() {
given://前置参数
when://执行需要测试的代码
then://验证执行结果
where://参数赋予不同值
}
【Leetcode刷题之spock单元测试】测试方法主要有四部分组成,功能如备注所示
def "test count1"() {
given:
Solution solution = new Solution()
when:// 执行需要测试的代码
int a = solution.count1(n)
then:// 验证执行结果
a == b
where://n和b的赋值
n | b
1 | 1
2 | 1
}
上面为举例模板,我在given里面定义我要测试的对象,在when里面,调用了对象里面的计算方法。then里面添加了判断语句,a是结果,b是我预期的结果,两个需要相等那方法的逻辑就没有问题。where里面我给n和b赋值,相当于提供了测试用例。
文章图片
可以看到执行了两组测试,很是方便。
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)