自動測試

讓程式來幫我們做測試,自動幫我們驗證結果是否正確。

加入自我測試程式

cart.php 尾端加入以下程式碼:

<?php
// ... 加入以下程式碼

// 測試碼
if (isset($argv[1]) && 'test' === strtolower($argv[1])) {

    $cart = new Cart();

    // Test 1
    $quantities = [
        1, 0, 0, 0, 0, 0,
    ];
    $cart->updateQuantities($quantities);
    if (199 !== $cart->getTotal()) {
        echo "Test 1 failed!\n";
    } else {
        echo "Test 1 OK!\n";
    }

    // Test 2
    $quantities = [
        1, 0, 0, 2, 0, 0,
    ];
    $cart->updateQuantities($quantities);
    if (797 !== $cart->getTotal()) {
        echo "Test 2 failed!\n";
    } else {
        echo "Test 2 OK!\n";
    }
}

執行以下指令:

C:\project> php cart.php debug
Test 1 OK!
Test 2 OK!

優點

  • 不需要開啟瀏覽器,直接測試關鍵程式。

  • 將預期結果寫在程式中,直接用程式比對。

缺點

  • 測試不是只有比對值的相等,常見的模式還有:

    • 是否為某變數類型
    • 陣列是否包含某值
    • 類別是否有某屬性
    • 是否有預期的錯誤
  • 每一種比對模式都要寫好多程式,結果用程式寫測試反而增加了負擔。

  • 測試要能夠自動化,最好是幫我們定義好所有可能的比對模式。

練習

  • 思考看看手動測試和自動測試的差異是什麼?

  • 把測試寫在要測試的程式中有什麼好處或風險?