单元测试规范
来源:互联网 发布:sql数据库.ndf怎么打开 编辑:程序博客网 时间:2024/04/29 17:56
单元测试规范
单元测试(Unit Test),下方统一简称为 UT。
一、Java UT 规范
技术选型
Java UT 框架选型:TestNG
选型参考:
- http://www.ibm.com/developerworks/cn/java/j-cq08296/
Java UT 的 Mock 框架选型:JMockit
选型参考:
- http://jmockit.org/
- http://stackoverflow.com/questions/4105592/comparison-between-mockito-vs-jmockit-why-is-mockito-voted-better-than-jmockit
文件、类与方法命名规范
术语定义:
- 源文件(SRC-PATHNAME):需要做 UT 的逻辑代码的代码文件
- UT文件(UT-PATHNAME):为源文件写的 UT 代码的代码文件
- 源类(SRC-CLASSNAME):源文件中的类
- UT类(UT-CLASSNAME):UT文件中的类
- 源方法(SRC-METHOD):源类中定义的方法/函数
- UT方法(UT-METHOD):UT类中定义的方法/函数
源文件必须存放在 SRC-ROOT 目录:
SRC-ROOT = "src/main/java"
UT文件必须存放在 UT-ROOT 目录:
UT-ROOT = "src/test/java"
文件命名规范如下:
UT-PATHNAME = UT-ROOT SRC-PACKAGE-PATH SRC-CLASSNAME "Test.java"SRC-PACKAGE-PATH = replace SRC-NAMESPACE from "." to "/"SRC-CLASSNAME = 1*(upcase-alpha *lowcase-alpha)SRC-NAMESPACE = 1*lowcase-alpha *( "." 1*lowcase-alpha)lowcase-alpha = %x61-7Aupcase-alpha = %x41-5A
以上规范的举例:
- 假定源类的全限定名为 com.fangdd.api.Service
- SRC-ROOT 必须是 src/main/java
- UT-ROOT 必须是 src/test/java
那么源文件路径是
src/main/java/com/fangdd/api/Service.java
它对应的 UT 文件的路径必须是
src/test/java/com/fangdd/api/ServiceTest.java
另外需要提醒的是:UT 不对接口做测试,而是对具体实现做测试。比如:
对于接口文件:src/main/java/com/fangdd/api/MyService.java假定对应的实现类文件为:src/main/java/com/fangdd/api/MyServiceImpl.java那么 UT 的文件为 MyServiceImplTest.java,而不是 MyServiceTest.java:src/test/java/com/fangdd/api/MyServiceImplTest.java
重要提醒 Team Code 做 Verify 的 Robot 为
了提高 UT 的效率,只会按照以上规范来查找变更的源文件有没有对应的 UT 文件。如果有
UT 文件,则做 UT,如果没有,则跳过。因此,大家一定不要绕过这个约束。
UT 全限定的类名由包名与基本类名组成。其规范与文件路径规范相一致。
即其中包名必须与源类的包名相同;基本类名为源类的基本类名 + Test 后缀。
例如:
package com.fangdd.api;public class MyServiceImpl {}
对应的 UT 类为
package com.fangdd.api;public class MyServiceImplTest {}
UT 方法名的规范为:
UT-METHOD = "test" CAMEL-CASE-SRC-METHODNAME [SUFFIX-NAME]CAMEL-CASE-SRC-METHODNAME = upcase first char for SRC-METHODNAMESUFFIX-NAME = *任意有效的字符
例如,源方法名为:
doRequest()doRequest(String url)
那么对应的 UT 方法名为:
testDoRequest()testDoRequest_string() // 以方法签名为后缀的形式来区分或者testDoRequest1() // 以序数为后缀的形式来区分
重点提示 测试方法必须以 test 为前缀,接源方法的大驼峰形式的方法名,
再接可选的后缀。后缀无特别要求。
使用 IntelliJ IDEA 创建符合本规范的 UT Case
- 在 Editor 中打开源文件
- 将光标定位到定义类名的那一行
- 接 Alt+Enter 或 Ctrl+Shift+T(如果已创建则直接跳到UT文件) 弹出集成菜单
- 点击菜单中的 【Create Test】,弹出创建 UT 文件的对话框
- 在 【Testing library】中选择 TestNG
- 如果没有安装 TestNG,会显示一行提示,点击【Fix】按钮即可
- 默认在【Class name】中会自动填写符合本规范的 UT 类名,如果不符合规范,则改之,使之符合
- 【Superclass】留空不填
- 默认在【Destination package】中会自动填写符合本规范的 UT 包名,如果不符合规范,则改之,使之符合。注:如果 IDEA 无法读取你的工作,会因识别不到 package 名而无法创建 UT 文件,此时就先解决工程问题(如 maven, gradle)
- 适当选择【Generate】 @Before 与 @After
- 在列出的源方法列表中,选择需要做测试的方法
- 点击【OK】即可创建符合本规范的 UT Case了
一个 TestNG 的简单示例
# 安装 TestNg mkdir -p /data0/app/testngcd /data0/app/testngwget http://jcenter.bintray.com/org/testng/testng/6.9.13/testng-6.9.13.jar# 编写测试示例mkdir -p fortest/src/main/java/mytestmkdir -p fortest/src/test/java/mytestvim fortest/src/main/java/mytest/Plus.javavim fortest/src/test/java/mytest/PlusTest.java# 设置 CLASSPATH,让 java 能找到 testng 与我们编写的 classexport CLASSPATH=/data0/app/testng/testng-6.9.13.jar:/data0/app/testng/fortest/src/main/java/mytest:/data0/app/testng/fortest/src/test/java/mytest# 编译示例文件cd /data0/app/testng/fortest/src/main/java/mytestjavac Plus.javacd /data0/app/testng/fortest/src/test/java/mytestjavac PlusTest.java# 开始测试# 我们的 CI 做测试时,只使用命令# java java org.testng.TestNG -testclass class1[,class2,...]# 来做单元测试 java org.testng.TestNG -testclass mytest.PlusTest
文件 Plus.java 代码:
package mytest;public class Plus { public int plus(int a, int b) { return a + b; } public static void main(String[] args) { Plus p = new Plus(); System.out.println("1 + 2 =" + p.plus(1, 2)); }}
文件 PlusTest.java 代码:
package mytest;import org.testng.annotations.*;import org.testng.asserts.Assertion;public class PlusTest { @Test public void testPlus() { Plus p = new Plus(); Assertion a = new Assertion(); a.assertEquals(3, p.plus(1, 2)); a.assertNotEquals(0, p.plus(3, 5)); System.out.println("Test Plus method:"); }}
测试团队写了一个 unittest-case 的示例项目,以及如何使用 TestNG 与 JMockit 的文档,
请参考 房多多单元测试。
二、Python UT 规范
三、PHP UT 规范
1 0
- 单元测试规范
- iOS单元测试编码规范
- iOS单元测试编码规范
- [iOS单元测试系列]单元测试编码规范
- iOS 单元测试4- 单元测试编码规范
- [iOS单元测试系列]单元测试编码规范
- Junit 之单元测试规范写法
- Java开发代码规范之单元测试
- 单元测试
- 单元测试
- 单元测试
- 单元测试
- 单元测试
- 单元测试
- 单元测试
- 单元测试
- 单元测试
- 单元测试
- vs常见问题
- log4cplus总结
- ie浏览器代理设置方法 怎么给IE浏览器设置代理?
- python 逗号作用
- Timer中schedule()的用法
- 单元测试规范
- Zookeeper Api(java)入门与应用
- springmvc 切面记录操作日志
- ElasticSearch 5.0 不能使用root启动源码分析
- 冒泡排序
- ThinkPhp的CURD操作和对应api接口代码
- 传中文参数
- mongodb 的python操作
- 动态规划之最长递增子序列