1. 程式人生 > >PHPUnit從零開始(2):編寫 PHPUnit 測試

PHPUnit從零開始(2):編寫 PHPUnit 測試

計劃永遠趕不上變化,本計劃本月完成所有PHPUnit的部落格內容。今天一看日曆發現都TMD的二月底了,而我才寫了一篇而已。情何以堪……

今天寫第二篇,詳細說一說如何寫出一個測試用例。
這裡會涉及到一些什麼自動載入之類的,我就不再這裡補充了,大家可以查閱相關PHP自動載入的資料。
首先我的專案結構如下:

+phpunit // 專案名稱
+src // 存放專案程式碼,需要測試的程式碼
+tests // 測試使用者存在目錄
+vendor // composer生成的目錄,存放的第三方包
composer.json // composer需要的配置檔案
index.php // 入口檔案,主要涉及自動載入相關程式碼
phpunit.xml // 測試用例的配置檔案

這裡每一個資料夾及檔案的大體情況如上,現在在我的src目錄下有一個檔案,名字:Money.php

<?php

namespace Src;

/**
 * @author: helei
 * @createTime: 2016-01-07 17:45
 * @description:
 */
class Money
{
    private $amount;

    public function __construct($amount)
    {
        $this->amount = $amount;
    }

    public function getAmount
() {
return $this->amount; } public function negate() { return new Money(-1 * $this->amount); } }

當你想把一些東西寫到 print 語句或者調試表達式中時,別這麼做,將其寫成一個測試來代替。 –Martin Fowler

這是程式設計大牛們的說的話,要我說:如果你想要測試一個方法內部邏輯是否正確,那麼就寫一個測試用例,測試一下這個方法,給他一個值,看看他輸出的結果是否是預期的值。

OK,現在具體到我這個方法,我要測試Money這個類,我給他初始化時,輸入1,經過Money::multiple()方法翻倍後,他的值應該是:2,然後通過Money::getAmount()獲取翻倍後的值,與2進行比較,通過斷言檢查是不是2.
那麼以上是測試用例要驗證的東西,具體到實際的編碼,在 tests

資料夾下面 新建一個 MoneyTest.php 檔案,

<?php

namespace Tests;

use Src\Money;

/**
 * @author: helei
 * @createTime: 2016-01-07 17:47
 * @description:
 */
class MoneyTest extends \PHPUnit_Framework_TestCase
{

    public function testCanBeNegated()
    {
        // Arrange
        $a = new Money(1);

        // Act
        $b = $a->multiple();

        // Assert
        $this->assertEquals(2, $b->getAmount());
    }
}

現在所有的程式碼寫完了,到了使用測試用例的時候了。這裡有必要給個輔助資料,通過這個官方的文件,可以詳細瞭解各個命令的使用。後面我用到的所有命令都不做解釋了哈,不明白的請移動這裡檢視。

在cmd命令列,進入到專案所在目錄,操作如下圖。
正確的情況:
測試結果正確

 .
 當測試成功時輸出。
 F
 當測試方法執行過程中一個斷言失敗時輸出。
 E
 當測試方法執行過程中產生一個錯誤時輸出。
 R
 當測試被標記為有風險時輸出。
 S
 當測試被跳過時輸出。
 I
 當測試被標記為不完整或未實現時輸出。
通過觀察,可以發現,命令列輸出的是一個 · ,代表Money這個類,輸出了我們預期的結果。通過了測試。

大家可以在斷言處,把各種相應的值進行修改,然後看看輸出的結果。

寫著寫著,發現PHPUnit的基礎知識也就這麼點,後面的好像可寫可不寫似的,因為在官方文件中都寫的清清楚楚了,我都不好意思再把文件抄過來一遍,然後寫個 原創。

耶,那我如果不寫了,那不是就完成了PHPUnit的部落格內容了嗎?哈哈,好吧,完成2016第一件任務,學完phpunit以及相關部落格。接下來會開始設計模式的相關寫作,並且會同步github了。

愛好學習與寫作的朋友們,千萬別跟我醬紫,明明還可以寫個五篇七篇的,就兩篇然後戛然而止了。當然如果還有不明白的地方,可以留言提問,我後面再補充幾篇也無不可。