phpunit概要

安装

PHP与nginx的安装,Ubuntu 14.04安装nginx和php的简要步骤如下:

$ sudo apt-get update
$ sudo apt-get install nginx
$ sudo apt-get install php5-fpm php5-mysql
修改/etc/php5/fpm/php.ini,配置cgi.fix_pathinfo=0
$ sudo service php5-fpm restart
修改/etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name server_domain_name_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
$ sudo service nginx restart

测试:

$ vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>

访问:

http://server_domain_name_or_IP/info.php


$ vi /usr/share/nginx/html/test.php
<html>
    <head>
        <title>Example</title>
    </head>
    <body>
        <?php
        echo "Hi, I'm a PHP script!";
        ?>
    </body>
</html>

访问:

http://server_domain_name_or_IP/test.php

参见:https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04。



PHPUnit 3.7以前的版本建议用PEAR(2015关闭使用)安装,PHPUnit 3.7及以后的版本建议用Composer安装。

PHPUnit的执行依赖PHP CLI,需要安装PHP CLI。建议安装Xdebug。它支持远程调试,代码覆盖分析和调优PHP脚本。

建议使用PHP 5.3.3以上版本。之前的版本不再维护。

PHPUnit的主页:http://phpunit.de。

验证PHP CLI正常工作:

$ php -r "echo 'Hello, World';"
Hello, World

CLI可能使用了不同的php.ini配置文件,使用"php -i"可以查看。

Composer的安装:

# curl -sS https://getcomposer.org/installer | php 
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /root/composer.phar
Use it: php composer.phar

# 或者
# php -r "readfile('https://getcomposer.org/installer');" | php

Composer可以指定PHPUnit的存储位置和脚本的位置,在机器上保留多个PHPUnit版本。

需要创建:composer.json,比如:

{
    "require-dev": {
        "phpunit/phpunit": "3.7.*"
    }
}

系统级别的:

{
    "require-dev": {
        "phpunit/phpunit": "4.8.*"
    },
    "config": {
        "bin-dir": "/usr/local/bin/"
    }    
}

然后执行“# php composer.phar install”即可完成安装。

ubuntu自带phpunit,安装方式:apt-get install phpunit。

手工安装,下载https://phar.phpunit.de/phpunit.phar ,测试"php phpunit.phar –version",可以放入系统目录:“chmod +x phpunit.phar; mv phpunit.phar /usr/local/bin/phpunit”。

Windows可以使用phpunit.bat,克隆即可:“git clone https://github.com/sebastianbergmann/phpunit/”

实例:

<?php
class FirstTest extends PHPUnit_Framework_TestCase {
    public function testAddition(){
        $this->assertEquals(2, 1 + 1);
    }
    
    public function testSubtraction(){
        $this->assertEquals(0.17, (1- 0.83));
    }
    
    public function testMultiplication(){
        $this->assertEquals(10, 2 * 5);
    }
    public function testDivision(){
        $this->assertTrue(2 == (10 / 5));
    }
}
?>

执行结果:

#phpunit FirstTest.php 
PHPUnit 4.3.1 by Sebastian Bergmann.
....
Time: 72 ms, Memory: 2.75Mb
OK (4 tests, 4 assertions)

Xdebug的下载 http://xdebug.org/download.php,安装不再赘述。


IDE支持

注意两个文件:

    •bootstrap.php中:测试之前运行,通常用于自动加载类的,这样不需要为每个文件执行require_once。
    •phpunit.xml:XML测试配置文件。

涉及的IDE有:

•     NetBeans
•     Zend Studio
•     Eclipse PDT
•     PhpStorm

NetBeans的设置为

1,在"工具 | 选项"中点击"PHP",选择"框架和工具",脚本中填入"/usr/bin/phpunit",框架生成器脚本中填入"/usr/local/bin/phpunit-skelgen"。

2,在"文件 | 项目属性"中点击左侧的”测试",勾选右侧的"phpunit"。

3, 右键点击主窗口左上角的"源文件", 依次进入“工具 | 创建测试"

4, 在步骤3中创建的目录中创建测试文件。

5, 右键点击文件选择"运行"或者Shift + F6即可执行测试。

框架生成器的安装参见:https://github.com/sebastianbergmann/phpunit-skeleton-generator


其他IDE这里不做详细介绍。


测试概述

单元测试是在指定上下文和输入的情况下执行其他代码块(函数/方法),并比较输出和预期值。又叫断言。

function sum($a, $b)
{
    return $a + $b;
}
$this->assertEquals(2, sum(1, 1));

断言是单元测试的灵魂,常见的断言如下:

•     assertTrue()
•     assertFalse()
•     assertEquals() : 等同于 ==
•     assertSame() : 等同于 ===

•     assertNull() : This verifies that value is null
•     assertEmpty() : 使用 PHP函数empty() , 可以为false , null , '' , array()

完整列表参见:https://phpunit.de/manual/4.8/en/appendixes.assertions.html

通过扩展类PHPUnit_Framework_Constraint还可以创建自己的断言。


好的测试的特点如下:

•独立
•快速
•可重复
•及时更新
•短小
•弹性

单元测试代码最好在实际代码书写之前写好。


我们再来看第2个例子:

<?php
class SecondTest extends PHPUnit_Framework_TestCase
{
    public function testAsort()
    {
        $vegetablesArray = array('carrot' => 1, 'broccoli' => 2.99, 'garlic' => 3.98, 'swede' => 1.75);
        $sortedArray = array('carrot' => 1, 'swede' => 1.75, 'broccoli' => 2.99, 'garlic' => 3.98);
        asort($vegetablesArray, SORT_NUMERIC);
        $this->assertSame($sortedArray, $vegetablesArray);
    }
    
    public function testKsort()
    {
        $fruitsArray = array('oranges' => 1.75, 'apples' => 2.05, 'bananas' => 0.68, 'pear' => 2.75);
        $sortedArray = array('apples' => 2.05, 'bananas' => 0.68, 'oranges' => 1.75, 'pear' => 2.75);
        ksort($fruitsArray, SORT_STRING);
        $this->assertSame($sortedArray, $fruitsArray);
    }
}

常见的文件布局格式:

.
|-- src
|        '-- library
|                '-- Util
|                        '-- File.php
'-- tests
        '-- library
                '-- Util
                        '-- FileTest.php


可以扩展PHPUnit_Framework_TestCase:

abstract class PHPUnit_Framework_TestCase extends
    PHPUnit_Framework_Assert implements PHPUnit_Framework_Test,
    PHPUnit_Framework_SelfDescribing


 •abstract:抽象类,扩展PHPUnit_Framework,不直接执行。
•extends PHPUnit_Framework_Assert 提供了一组断言方法,如assertTrue()和的assertEquals()。

•implements PHPUnit_Framework_Test:包含run()方法用于执行测试
•implements PHPUnit_Framework_SelfDescribing:包含toString()方法


PHP 5.3中引入了namespace,PHPUnit为了兼容等原因没使用,而是使用下划线分割类名的方式。

测试方法以test开头,比如testChangePassword()或testChangePasswordForLockedAcoounts()。



你可能感兴趣的:(phpunit概要)