phpunit学习

一.Phpunit的学习

2.注意事项

一般情况下,phpunit4.8支持php5.3.3+

Phpunit5.1要求php必须为5.6

3.php安装步骤(注意一定要把名字改成phpunit.phar)

为 PHP 的二进制可执行文件建立一个目录,例如 C:\bin

将 ;C:\bin 附加到 PATH 环境变量中(相关帮助)

下载https://phar.phpunit.de/ 并将文件保存到 C:\bin\phpunit.phar

打开命令行(例如,按 Windows+R » 输入 cmd » ENTER)

建立外包覆批处理脚本(最后得到 C:\bin\phpunit.cmd):

C:\Users\username> cd C:\bin

C:\bin> echo @php "%~dp0phpunit.phar" %* >  phpunit.cmd

C:\bin> exit

新开一个命令行窗口,确认一下可以在任意路径下执行 PHPUnit

C:\Users\username> phpunit --version

PHPUnit x.y.z by Sebastian Bergmann and contributors

4.注意事项

Composer

如果用 Composer 来管理项目的依赖关系,只要在项目的 composer.json 文件中简单地加上对 phpunit/phpunit 的依赖关系即可。下面是一个最小化的 composer.json 文件的例子,只定义了一个对 PHPUnit 4.8 的开发时(development-time)依赖:

 

{

    "require-dev": {

        "phpunit/phpunit": "4.8.*"

    }

}

要通过 Composer 完成系统级的安装,可以运行:

composer global require "phpunit/phpunit=4.8.*"

请确保 path 变量中包含有 ~/.composer/vendor/bin/

二、编写编写 PHPUnit 测试

1.以简单测试

例 1: 用 PHPUnit 测试数组操作

<?php

class StackTest extends PHPUnit_Framework_TestCase

{

    public function testPushAndPop()

    {

        $stack = array();

        $this->assertEquals(0, count($stack));

 

        array_push($stack, 'foo');

        $this->assertEquals('foo', $stack[count($stack)-1]);

        $this->assertEquals(1, count($stack));

 

        $this->assertEquals('foo', array_pop($stack));

        $this->assertEquals(0, count($stack));

    }

}

?>

执行:phpunit “文件路径+文件名.php”,如果哪个测试不通过,则会抱哪一行出错。

2.PHPUnit支持对测试方法之间的显式依赖关系进行声明。这种依赖关系并不是定义在测试方法的执行顺序中,而是允许生产者(producer)返回一个测试基境(fixture)的实例,并将此实例传递给依赖于它的消费者(consumer)们。

 

生产者(producer),是能生成被测单元并将其作为返回值的测试方法。

 

消费者(consumer),是依赖于一个或多个生产者及其返回值的测试方法。

 

例 2.2展示了如何用 @depends 标注来表达测试方法之间的依赖关系。

 

例 2.2: 用 @depends 标注来表达依赖关系

 

<?php

class StackTest extends PHPUnit_Framework_TestCase

{

    public function testEmpty()

    {

        $stack = array();

        $this->assertEmpty($stack);

 

        return $stack;

    }

 

    /**

     * @depends testEmpty

     */

    public function testPush(array $stack)

    {

        array_push($stack, 'foo');

        $this->assertEquals('foo', $stack[count($stack)-1]);

        $this->assertNotEmpty($stack);

 

        return $stack;

    }

 

    /**

     * @depends testPush

     */

    public function testPop(array $stack)

    {

        $this->assertEquals('foo', array_pop($stack));

        $this->assertEmpty($stack);

    }

}

?>

2.数据供给器

测试方法可以接受任意参数。这些参数由数据供给器方法(在 例 2.5中,是 additionProvider() 方法)提供。用 @dataProvider 标注来指定使用哪个数据供给器方法。

 

数据供给器方法必须声明为 public,其返回值要么是一个数组,其每个元素也是数组;要么是一个实现了 Iterator 接口的对象,在对它进行迭代时每步产生一个数组。每个数组都是测试数据集的一部分,将以它的内容作为参数来调用测试方法。

案例:

<?php

class DataTest extends PHPUnit_Framework_TestCase

{

     public function additionProvider()

    {

        return array(

          array(0, 0, 0),

          array(0, 1, 1),

          array(1, 1, 1),

          array(1, 2, 3)

        );

    }

    /**

     * @dataProvider additionProvider

     */

    public function testAdd($a, $b, $expected)

    {

        $this->assertEquals($expected, $a + $b);

    }

}

2、当使用到大量数据集时,最好逐个用字符串键名对其命名,避免用默认的数字键名。这样输出信息会更加详细些,其中将包含打断测试的数据集所对应的名称。

 

例 2.6: 使用带有命名数据集的数据供给器

<?php

class DataTest extends PHPUnit_Framework_TestCase

{

    /**

     * @dataProvider additionProvider

     */

    public function testAdd($a, $b, $expected)

    {

        $this->assertEquals($expected, $a + $b);

    }

 

    public function additionProvider()

    {

        return array(

          'adding zeros' => array(0, 0, 0),

          'zero plus one' => array(0, 1, 1),

          'one plus zero' => array(1, 0, 1),

          'one plus one' => array(1, 1, 3)

        );

    }

}

?>

3.使用返回迭代器对象的数据供给器

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值