小概念
单元测试:对函数、类测试。
单元测试覆盖率:一种软件测试的度量指标。指在所有功能代码中,完成了单元测试的代码所占的比例。有很多自动化测试框架工具可以提供这一统计数据,其中最基础的计算方式是:单元测试覆盖率 = 被测代码行数/ 参测代码总函数 *100%
原来单元测试要开发自己写的。怎么写?
要写一个标准的看起来专业的单元测试,代码结构要有这些部分:准备、调用、断言
准备:准备好调用(被测单元)的外部环境,比如数据、Stub(桩代码),Mock、临时变量、调用请求、环境背景变量等
调用:就是被测试的方法(函数、流程本身)
断言:断言部分判断调用部分返回的结果是否符合预期
那怎么触碰到这三个重要部分?
- 准备——驱动程序:就是你要写个main函数,去调那个被你测试的方法。桩程序:用来你模拟被测模块工作过程中所调用的下层模块,也就是被测模块本身调用的其他关联函数,桩是指用来代替关联代码或未实现的代码,为了测试对象能够正常执行。一般会硬编码一些输入输出。
- 调用——写好那个被测试的方法
- 断言——Mock。Mock除了保证Stub的功能外,还可深入的模拟对象之间的交互方式,如:调用了几次,在某种情况下是否会抛出异常以及提供数据断言。 以上的驱动程序、stub、Mock都不用什么技术、什么工具,而是一个对事物的描述。在写出来的单元测试代码中,符合这些条件的代码被称为“驱动程序、stub、Mock”。只是为了让人看得清晰明了,方便使用。
自动测试
当然,这样纯手工写单元测试代码会疯的,太多了。可以使用工具:JUnit、PHPUnit、Codeception、Behat、PHPSpec、SimpleTest、Storyplayer、Peridot、Atoum、Kahlan、Selenium。这,就衍生出自动化测试了。
一些错误认识
以前测试,都是通过浏览器访问URL的。其实正规来说,单元测试用例应该通过命令操控测试脚本。