測試基本寫法
接下來我們要利用 PHPUnit 來撰寫我們第一個測試。
建立專案測試環境
為專案建立一個 tests
資料夾。
- 測試案例類別慣例以
Test
結尾,檔名和類別名要一致,此例檔名為CartTest.php
。
撰寫測試
<?php
/* tests/CartTest.php */
require __DIR__ . '/../Cart.php';
class CartTest extends PHPUnit_Framework_TestCase
{
public function testCart()
{
$cart = new Cart();
// Test 1
$quantities = [
1, 0, 0, 0, 0, 0,
];
$cart->updateQuantities($quantities);
$this->assertEquals(199, $cart->getTotal());
// Test 2
$quantities = [
1, 0, 0, 2, 0, 0,
];
$cart->updateQuantities($quantities);
$this->assertEquals(797, $cart->getTotal());
// Test 3
$products = $cart->getProducts();
$this->assertEquals(6, count($products));
$this->assertEquals(2, $products[3]['quantity']);
}
}
- 引用要測試的檔案,這裡為
Cart.php
。 - 測試案例類別要繼承 PHPUnit 的
PHPUnit_Framework_TestCase
類別。 phpunit
指令會自動載入 PHPUnit 相關類別。- 在測試案例類別裡,通常會有一到多個以
test*
開頭的方法,它們稱為「測試 (test) 」。 - 每組測試都可以有多個斷言 (assertion) 。
assertEquals
斷言兩值應為相等。- 在斷言裡,要先寫預期結果,再寫實際結果。
執行測試
切換到專案目錄後,就可以透過 phpunit
指令來執行測試:
C:\> cd C:\project
C:\project> phpunit tests/CartTest
PHPUnit 4.2.5 by Sebastian Bergmann.
.
Time: 34 ms, Memory: 3.00Mb
OK (1 test, 2 assertions)
不需要指定完整 php 檔名,所以這裡只寫
tests/CartTest
。如果想要執行所有測試程式的話,就不用特別指定測試檔案名稱,直接指定目錄即可;例如:
C:\project> phpunit tests
.
句點表示一個測試案例已測試成功;其他符號有:F
:斷言失敗E
:發生錯誤R
:測試被標記為有風險S
:測試被跳過I
:測試被標記為不完整或未實現
OK
表示全部測試成功,FAILURES!
表示有測試發生失敗。(1 test, 2 assertions)
表示有一個測試案例,兩個斷言。另外當測試失敗時,會出現Failures: n
表示有 n 個斷言失敗。
官方手冊參考
練習
在官方手冊的附錄 A 裡,找出你認為較不瞭解的斷言類型,瞭解它們運作方式。
思考上面的測試還有什麼可以加強的地方?