in PHPUnit

PHPUnit 環境安裝與測試筆記

我們在開發網站的時候,很多人的習慣都是開發完之後再做測試,或是不測試,或是只使用黑箱測試而已,其他就沒有了。這樣是一個不正常的開發流程,因為測試的目的是要找錯,找到錯誤之後才可以修正錯誤(Debug),如此軟體才會進步與更加穩固,如果沒有測試的話,就會有潛在的錯誤風險,就可能等到網站上線之後,萬一出錯,就要承擔較高的風險,因此及早找到錯誤,改正錯誤,所花的成本較低。

本筆記是在介紹,我們使用 PHP 開發完網站時,需要遇到白箱測試或黑箱測試時,對裡面 code 做 unit testing. 我們會用到這個工具:PHPUnit 它可以測試 PHP 的 function 與 PHP 的 class

作業系統:LXDE + Ubuntu 14.04

第一步:到官網下載PHPUnit.phar 檔,也可以利用套件管理,Composer 做安裝,不過這裡為了安裝方便,所以直接手動安裝下載 phar 檔使用。

第二步:新版的需要使用PHP 5.6,如果直接在終端機輸入:php phpunit.phar 則會跳出


This version of PHPUnit requires PHP 5.6; using the latest version of PHP is highly recommended.

第三步:我們可以改成下載比較舊的版本,像是 4.8 就可以支援。

第四步:如果最初一開始連 PHP 都沒有裝的話,這一步需要做,如果已經安裝而且也安裝了 Xdebug 套件的話,那這一步可以跳過。打開終端機輸入下列的指令:


sudo apt-get install php5-cli

sudo apt-get install php5-xdebug

這樣安裝好之後,PHP 的版本為  5.5.9 不過這沒有關係,我們用舊版的 PHPUnit 4.8 就可以解決了。舊版的在官網上有一欄上面寫著:Old Stable Release 下面就有提供舊版的 PHPUnit.phar

第五步:這樣我們的測試環境就已經算完成了。

第六步:我們試著撰寫一個測試案例來測試。下面是一個簡單的輸出 Hello World 字串的函式。


<?php
       function hello($num1, $num2)
      {
           return $num1 + $num2;
      }

      class testHello extends PHPUnit_Framework_TestCase
      {
           /** @test */
          public function helloTest()
          {
                $test = hello(1, 3);
                $this->assertEquals(4, $test);
          }
     }
?>

接著在終端機上輸入指令:

php phpunit-old.phar test.php

之後,就會在終端機上看到下面測試的結果:

PHPUnit 4.8.20 by Sebastian Bergmann and contributors.

.

Time: 277 ms, Memory: 7.75Mb

OK (1 test, 1 assertion)

這樣一個基本的測試就結束了,當然在測試的時候,測試案例,test case 是要自己產生的,PHPUnit 並沒有內建功能可以產生 test case 的。之後會有介紹如何安裝 code coverage 可以作為觀看程式碼的含蓋率。需要注意的是, /** @test */ 這一行的註解是需要的,要用來給 PHPUnit 標示測試的函式。

否則的話會出現 No tests found in class “testHello”. 在終端機上。

[後記]

因為 Lubuntu 14.10 升級到 Lubuntu 15.04 了,所以連 PHP 版本也跟著升級到 5.6.4 了 XD 所以上面的問題幾乎都迎刃而解,直接跳過第三步從第四步開始,PHPUnit 也可以用最新版,也不需要自行編譯 PHP 5.6 ,所以不需要繁複的過程,就自行升級 Lubuntu 15.04  吧(誤

作業系統:Windows 系列

PHP 官網下載 binaries for windows 使用。下載 VC11 x64 Thread Safe (2015-Nov-26 04:33:59) 的 zip 檔並解壓縮到自己定義的目錄下。如果想要設定全域變數,避免不需要打一長串的路徑,可以到控制台設定環境變數。如果不設定的話,就每次要使用 PHP 指令時,切換到壓縮的目錄底下即可。

設定變數如下截圖,就把壓縮目錄,加一行到 Path 變數值中,記得要打分號隔開。

php5.6

打開 cmd.exe 切換到 PHP 5.6.16 壓縮的目錄底下,或是直接打 PHP 相關指令 (如果有設定環境變數的話),接著輸入下面的指令:


php -v

接著會看到 PHP 相關本版本訊息,如下截圖。

php-v

這樣 PHP-cli 環境就建置完成了,安裝 PHPUnit 就按照上面下載 phpunit.phar,下來使用,就可以開始測試了。

另外,截圖上面,是沒有安裝 xDebug 的外掛的,要安裝的話,可以自行到 XDebug 官網下載的,建議下載最新的穩定版本,比較不會有問題。

接著把其中一個 php.ini 改成正確的附檔名,有兩個可以選擇,一個是開發階段設定檔,另一個是發佈產品使用的,我們用開發階段那個,把它改成正確的副檔名:ini

打開設定檔並編輯,並把下面這段文字複製到最下面:


zend_extension = "c:/wamp/bin/php/php-5.6.15/zend_ext/php_xdebug-2.2.5-5.6-vc11-x86_64.dll"
;
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "c:/wamp/tmp"
xdebug.show_local_vars=0

其中,c:/wamp/bin/php/php-5.6.15/zend_ext/php_xdebug-2.2.5-5.6-vc11-x86_64.dll 這一行改成自己確切存放 xDebug 的位置,接著再輸入一次下面的指令。


php -v

 

就會看當下面截圖的樣子:就會多 with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans 相關的訊息了。

php-v

這樣環境就建置完成了。下一篇將會介紹,使用 php-code-coverage