单元测试规范

来源:互联网 发布: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

  1. 在 Editor 中打开源文件
  2. 将光标定位到定义类名的那一行
  3. 接 Alt+Enter 或 Ctrl+Shift+T(如果已创建则直接跳到UT文件) 弹出集成菜单
  4. 点击菜单中的 【Create Test】,弹出创建 UT 文件的对话框
  5. 在 【Testing library】中选择 TestNG
  6. 如果没有安装 TestNG,会显示一行提示,点击【Fix】按钮即可
  7. 默认在【Class name】中会自动填写符合本规范的 UT 类名,如果不符合规范,则改之,使之符合
  8. 【Superclass】留空不填
  9. 默认在【Destination package】中会自动填写符合本规范的 UT 包名,如果不符合规范,则改之,使之符合。注:如果 IDEA 无法读取你的工作,会因识别不到 package 名而无法创建 UT 文件,此时就先解决工程问题(如 maven, gradle)
  10. 适当选择【Generate】 @Before 与 @After
  11. 在列出的源方法列表中,选择需要做测试的方法
  12. 点击【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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胎心监测波动小怎么办 怀孕6个月不想要了怎么办 高敏肌钙蛋白t高怎么办 龟头沟槽里长疙瘩怎么办 肝郁气滞的体质怎么办 手指甲长在肉里怎么办 甲床与指甲脱离怎么办 指甲往肉里面长怎么办 指甲和肉分离是怎么办 大脚趾指甲空了怎么办 脚趾甲长在肉里怎么办 脚趾甲又厚又硬怎么办 小孩子咳嗽有痰怎么办%3f 支气扩张咳血怎么办小 背部第8块脊椎疼怎么办 坐时间长了背疼怎么办 新生儿总哭怎么办吐奶 婴儿吃饱了还哭怎么办 宝宝喉咙哭哑了怎么办 婴儿哭哑了嗓子怎么办 婴儿胖子哭哑了怎么办 孩子声音哭哑了怎么办 喝咖啡手抖心慌怎么办 累了就心慌发抖怎么办 经常头晕心慌胸闷乏力怎么办 在末地迷路了怎么办 在森林里迷路了怎么办 电热宝充电不热怎么办 保温壶按钮坏了怎么办 热水壶盖子坏了怎么办 充电暖宝宝不热怎么办 刚怀孕孕酮低该怎么办 小三怀孕了该怎么办 15学生怀孕了该怎么办 学东西慢悟性差怎么办 欠债不还怎么办有欠条 欠了几百万我该怎么办 玄凤鹦鹉感冒了怎么办 多肉爆出小崽怎么办 多肉红宝石爆崽怎么办 黑尾蜡嘴太怕人怎么办