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,安装不再赘述。
注意两个文件:
•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()。