testOne中断言为True,但是传入的是false,testOne的测试不会通过,那么依赖于testOne的testTwo也会被自动跳过.
数据提供者(Data Providers)
在前面的例子我们可以看到:测试方法是可以有参数的,在依赖关系中参数的值是它依赖的测试方法传入.那么某个测试方法没有依赖的方法,我们怎么给它传入参数做测试呢?PHPUnit给我们提供了数据提供者方法来为测试方法传入数据.
数据提供者方法需要定义在当前的测试类中,在测试方法的注释中使用@dataProvider标签标注给它提供数据的方法名,定义之后PHPUnit会自动的将数据提供者方法返回的数据依次传入到测试方法中测试.
数据提供者相当于都取大量数据测试时的封装
代码:
在上面的代码中,方法add_provider就是测试方法testAdd的数据提供者方法,它会依次给testAdd传入4组测试数据,testAdd会测试4次.
注意:数据提供者方法返回数据的格式: 需要返回的是2维数组,第二维数组值的位置,对应测试方法参数的位置,参数个数和数组长度要相等,否则PHPUnit会报错,下面是个用于理解的简单的例子:
除了数组外,PHPUnit还支持数据提供者方法返回迭代器对象,迭代器的介绍估计大部分PHPer比较陌生,详细的介绍可以去http://php.net/manual/en/class.iterator.php 查看。
来看代码(点击图片放大察看):
和前一个例子实现的测试内容相同,但是数据提供者返回的是一个迭代器对象而不是是数组
数据提供者方法和依赖关系的限制
当一个测试方法依赖于另外一个使用data providers测试方法时,这个测试方法将会在它依赖的方法至少测试成功一次后运行,同时使用data providers的测试方法的执行的结果不能传入一个依赖它的测试方法中.这个解释来自官方的文档,理解起来可能有点难,我们通过代码来描述下这个限制:
情况1: add_provider提供的数据至少有一对数据相等
testC会执行一次, 因为testC是依赖于testB的, 但是testB使用了数据提供者方法,那么testC中是无法收到testB return的值的
情况2: add_provider提供的数据没有一对数据相等
testC永远不会执行
测试异常
有时需要测试某些情况下代码是否按照要求抛出了相关的异常。
在PHPUnit中,有3种方式来检查异常是否抛出。
方法一: 注释法, 用@expectedException 标定期待的异常
方法二: 设定法,使用 $this->setExpectedException 设定期待的异常
方法三: try catch + fail法
测试PHP错误
有时,代码在运行时会出现php错误,如整除0,文件不存在等等.在PHPUnit中,它会自动把错误转换为异常PHPUnit_Framework_Error并抛出,我们只需要在测试方法中设定抓取这个异常即可:
本节就介绍到这里了,下篇将详细介绍PHPUnit测试的核心:断言,敬请关注。