網頁

2014年1月16日 星期四

PHPUnit學習筆記-測試的第一步

安裝好PHPUnit後,再來當然就是試試看囉

先看了一下這個教學:Test-Driven Development in PHP: First StepsPHPUnit 入門介紹

我常用的IDE是PDT(Eclipse for PHP),不過看起來沒有好的PHPUnit plugin,想想先用用command line方式來處理好了。

Step1. 先建好project目錄

$mkdir php_test_example/hello/test
$cd php_test_example/hello/


Test-Driven program的理念就是先寫測試然後修複測試,一次只修複一個小error。所以

Step2. 建立測試

$touch test/hello_test.php
$vim test/hello_test.php


填入
<?php


class HelloTest extends PHPUnit_Framework_TestCase
{
  public function test_echo_hello()
  {
    $c = new Hello();
    $this->assertEquals('hello',$c->echo_hello());
  }
}
?>


再來執行測試
$phpunit test/hello_test.php

得到底下的回應
PHPUnit 3.7.28 by Sebastian Bergmann.


PHP Fatal error: Class 'Hello' not found in php_test_example/hello/test/hello_test.php on line 7
ok,沒有Hello這個Class。


Step3. 建立實際要用的程式

$vim test/hello_test.php
在class前加入
require_once 'hello.php';

建立hello.php
$touch hello.php
$vim hello.php
填入
<?php
class Hello
{

}
?>


再次執行
$phpunit test/hello_test.php

這次回應變成
PHPUnit 3.7.28 by Sebastian Bergmann.

PHP Fatal error: Call to undefined method Hello::echo_hello() in php_test_example/hello/test/hello_test.php on line 10

Step4. 修正錯誤

<?php
class Hello
{
    function echo_hello()
    {

    }
}
?>

這邊故意沒加入回傳hello,再次執行
$phpunit test/hello_test.php


回應變成
PHPUnit 3.7.28 by Sebastian Bergmann.

F

Time: 27 ms, Memory: 2.50Mb

There was 1 failure:

1) HelloTest::test_echo_hello

Failed asserting that null matches expected 'hello'.


php_test_example/hello/test/hello_test.php:10


FAILURES!

Tests: 1, Assertions: 1, Failures: 1.


嘖嘖,果然查出有錯。再重覆這步驟,修正為
<?php
class Hello
{
    function echo_hello()
    {
        return 'hello';
    }
}
?>


再次執行
$phpunit test/hello_test.php

這次就成功啦~!!
PHPUnit 3.7.28 by Sebastian Bergmann.
.

Time: 16 ms, Memory: 2.25Mb

OK (1 test, 1 assertion)


大概流程就這樣,實際花不到3分鐘的時間做完。再來就要來試試WordPress上的測試啦,哈哈

參考網址
The session: Test-Driven PHP
It’s Time To Dig In
The Newbie’s Guide to Test-Driven Development

沒有留言:

張貼留言