PHPUnit 自動化測試大作戰【CH03】

閱讀時間約 4 分鐘

今天我們來寫第一個單元測試吧! 不過在那之前,先讓我們了解單元測試的「3個A」

單元測試3A

所謂的「3個A」,是指以下三個英文單字:

  • Arrange:初始化工作,如準備假資料
  • Act:執行測試對象
  • Assert:驗證結果

一個良好的單元測試案例,應該包含以上的結構, 依序執行 Arrange → Act → Assert, 並顯示驗證結果,這樣就是一個完整的單元測試程式。

第一個測試

事不宜遲,馬上來寫測試吧!

在開始撰寫第一個測試前,先讓我們做一個待測對象, 我們以一個計算BMI的函數為例子吧!

在 app\\Services 資料夾下,建立 TestService.php

<?php

namespace App\\Services;

class TestService{

public function calculateBmi(float $height, float $weight): float {

if ($weight <= 0) {

return 0.0;

} return $weight / ($height * $height);

}}

接著馬上來建立測試,在 workspace 容器內,專案資料夾下執行以下指令,建立單元測試:

php artisan make:test TestServiceTest --unit

建立 TestServiceTest.php 後,讓我們來撰寫測試函數吧:

<?php

namespace Tests\\Unit;

use App\\Services\\TestService;

use PHPUnit\\Framework\\TestCase;

class TestServiceTest extends TestCase{

/** * Test calculateBmi */

public function testCalculateBmi() {

// Arrange

// 初始化待測對象

// 以及執行測試所需的資料

$service = app(TestService::class);

$height = 1.6;

$weight = 64.0;

// Act

// 執行欲測試的函數/程式碼區塊/行為

$actualBmi = $service->calculateBmi($height, $weight);

// Assert

// 驗證測試結果

$expectedBmi = 25;

$this->assertEquals($actualBmi, $expectedBmi);

}}

首先,先來解釋各個區塊程式碼邏輯:

// Arrange

// 初始化待測對象

// 以及執行測試所需的資料

$service = app(TestService::class);

$height = 1.6;

$weight = 64.0;

這邊先建立1個 TestService 的實例 $service , 並初始化稍候執行待測對象時,所需的資料。

// Act

// 執行欲測試的函數/程式碼區塊/行為

$actualBmi = $service->calculateBmi($height, $weight);

這邊就是執行要測試的程式碼區塊。

// Assert

// 驗證測試結果

$expectedBmi = 25;

$this->assertEquals($actualBmi, $expectedBmi);

進行驗證,其中 $this→assertEquals 是目前我們所用到的第一個 Assert 函數, 它用來驗證第一個輸入值(實際值)是否與第二個(期望值)輸入值相等。

待測對象與測試案例都準備好後,就讓我們來執行測試吧:

./vendor/bin/phpunit

應該會看到以下輸出結果:

恭喜完成第一個單元測試! 是不是很簡單呢?

下一篇來介紹常用的 Assert 函數。

如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄

參考資料

本系列文章目錄

avatar-img
8會員
279內容數
歡迎來到 WilliamP 的沙龍天地,在這裡將與各位讀者探討各種主題,包刮高中數學題庫、PHP開發經驗、LINE聊天機器人開發經驗、書摘筆記等,歡迎交流!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
WilliamP的沙龍 的其他內容
下載與設定 Laradock 首先,讓我們在Home資料夾下,將 Laradock 下載下來: cd ~ && git clone <https://github.com/Laradock/laradock.git> Laradock 將 Laradock 下載回來後,切換到 Laradock
初遇自動化測試 在數年前,我剛從第一份工作離職,轉職到第二份工作, 新工作是在一個大集團的IT部門,職位是後端工程師。 當時集團正準備導入一個由子公司開發的微服務系統, 使用的技術是PHP 8 及 Laravel 9 因為該系 統在子公司運作得不錯, 因此集團高層想將它擴展成,全集團都可使用的規模
下載與設定 Laradock 首先,讓我們在Home資料夾下,將 Laradock 下載下來: cd ~ && git clone <https://github.com/Laradock/laradock.git> Laradock 將 Laradock 下載回來後,切換到 Laradock
初遇自動化測試 在數年前,我剛從第一份工作離職,轉職到第二份工作, 新工作是在一個大集團的IT部門,職位是後端工程師。 當時集團正準備導入一個由子公司開發的微服務系統, 使用的技術是PHP 8 及 Laravel 9 因為該系 統在子公司運作得不錯, 因此集團高層想將它擴展成,全集團都可使用的規模
你可能也想看
Google News 追蹤
Thumbnail
【這個系列,目標是以比較輕鬆的方式讓大家一起學習AE表達式。】 本文是番外篇 3,主要是一些概念的補充,介紹陣列。
Thumbnail
11122233543654765e 5 54yopjrsodihjer089yhzp
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
這是一篇很精彩的測試文章喔!
Thumbnail
【這個系列,目標是以比較輕鬆的方式讓大家一起學習AE表達式。】 本文是番外篇 3,主要是一些概念的補充,介紹陣列。
Thumbnail
11122233543654765e 5 54yopjrsodihjer089yhzp
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
這是一篇很精彩的測試文章喔!