PHPUnit 單元測試練習

更新 發佈閱讀 7 分鐘

這邊練習 PHPUnit 測試的撰寫,依序創建Controller、Service。

首先創建一個名為 IndexAction 的 Single Actions Controller

Single Actions Controller 方便我們處理複雜的作業,且也可以避免Controller肥大的問題。

php artisan make:controller IndexAction --invokable

如果使用 Single Actions Controller,則路由檔可以減少寫對應的 action

use App\Http\Controllers\IndexAction;

Route::post('/calculator', IndexAction::class);

創建Controller完畢後,建立一個呼叫Calculator Serivce 來計算兩數字處理,程式碼如下:

<?php

namespace App\Http\Controllers;

use App\Services\Calculator;
use Illuminate\Http\Request;

class TestController extends Controller
{
private Calculator $myCalculator;

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

public function getCalculatorResult()
{
$result = $this->myCalculator->calculator('Addition', 1, 2);

return $result;
}
}

接著創建名為Calculator Service,並寫一個計算的邏輯,這邊定義一個計算類型$operation,根據要計算的方式處理

<?php

namespace App\Services;


Class Calculator
{
public function calculator(string $operation, int $a, int $b)
{
//加法 Addition
//減法 Subtraction
//乘法 Multiplication
switch($operation){
case 'Addition':
$reuslt = $a + $b;
break;
case 'Subtraction':
$reuslt = $a - $b;
break;
case 'Multiplication':
$reuslt = $a * $b;
break;
default:
return 'The operation is not suported.';

}

return $reuslt;
}
}

接著撰寫Service單元測試,這邊要測試 Service calculator function,並確保傳入值都有如實測試到,這邊使用 data-providers 幫助我們建立多個測試類型,依序測試加法、減法、乘法及未提供 Operation type

<?php

namespace Tests\Unit;

use App\Services\Calculator;
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
protected $calculator;

public function setUp(): void
{
$this->calculator = $this->createMock(Calculator::class);
}

/**
* @dataProvider dataProvider
* @param string $operation
* @param int $a
* @param int $b
* @param mixed expectResult
*/
public function test_calculator(string $operation, int $a, int $b, mixed $expectResult)
{
$calculatorResult = new Calculator($this->calculator);

$this->assertEquals($expectResult, $calculatorResult->calculator($operation, $a,$b));
}

public static function dataProvider()
{
return [
'Addition' => ['Addition', 1, 2, 3],
'Subtraction' => ['Subtraction', 2, 1, 1],
'Multiplication' => ['Multiplication', 2, 2, 4],
'no Operation' => ['', 0, 0, 'The operation is not suported.']
];
}
}


接著執行測試,一般可以使用php artisan test 進行測試。

或是對單一檔案測試

// 對單一檔案進行測試
php artisan test Tests/Unit/CalculatorTest.php

測試單一檔案其中某個 testing function

php artisan test Tests/Unit/CalculatorTest.php --filter test_calculator


接著可以看到測試結果

raw-image

總結:以上是單元測試練習過程,下一部分將以整合測試繼續說明

不知道為何範例程式碼明明編輯時內容是有排版,但發布後空白都消失了XD

參考文件

Single Actions Controller

data-providers





留言
avatar-img
DDDDD的沙龍
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
DDDDD的沙龍的其他內容
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
本章節介紹了PHP中的各種運算符,包括算數運算子、比較運算子、賦值運算子和位元運算子。還討論了運算子的優先等級及其在表達式中的應用。了解這些運算符及其優先等級可以幫助編寫更高效和準確的PHP代碼。
Thumbnail
本章節介紹了PHP中的各種運算符,包括算數運算子、比較運算子、賦值運算子和位元運算子。還討論了運算子的優先等級及其在表達式中的應用。了解這些運算符及其優先等級可以幫助編寫更高效和準確的PHP代碼。
Thumbnail
本課程學習如何實作處理加、減、乘和除按鈕等計算機相關邏輯。
Thumbnail
本課程學習如何實作處理加、減、乘和除按鈕等計算機相關邏輯。
Thumbnail
專案分享-計算機 邏輯思維:首先,要建立幾個變數與函式,方便我們作業。接下來針對每一個函式進行解釋。 讓大家可以自己動手做一個簡易的計算機
Thumbnail
專案分享-計算機 邏輯思維:首先,要建立幾個變數與函式,方便我們作業。接下來針對每一個函式進行解釋。 讓大家可以自己動手做一個簡易的計算機
Thumbnail
練習 PHPUnit 測試的撰寫,依序創建Controller、Service,並針對計算邏輯進行單元測試的練習。
Thumbnail
練習 PHPUnit 測試的撰寫,依序創建Controller、Service,並針對計算邏輯進行單元測試的練習。
Thumbnail
在這一課中,我們將學習 Python 的基本變量類型以及如何進行基本的數學運算。 Python 中有幾種基本的數據類型,包括整數 (int)、浮點數 (float)、字符串 (str) 和布林值 (bool)。 讓我們在一個新的文件中試試看,可以將這個文件命名為 variables_and_ma
Thumbnail
在這一課中,我們將學習 Python 的基本變量類型以及如何進行基本的數學運算。 Python 中有幾種基本的數據類型,包括整數 (int)、浮點數 (float)、字符串 (str) 和布林值 (bool)。 讓我們在一個新的文件中試試看,可以將這個文件命名為 variables_and_ma
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News