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-avatar-img
發文者
2023/09/07
PHPUnit 與 Mockery 寫法差異提及了這篇文章,趕快過去看看吧!
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
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
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
Thumbnail
先簡單說結論: 一個等號是賦值;二個等號是等於;三個等號是相同。
Thumbnail
先簡單說結論: 一個等號是賦值;二個等號是等於;三個等號是相同。
Thumbnail
【Quick Calc. 速算-多功能計算機】是一套簡易、清楚、直覺多功能的計算機,秉持著【簡潔】的設計理念,結合「經常使用」的計算模組,所開發出的計算機,全模組皆自行開發,非使用第三方計算機共用模組!
Thumbnail
【Quick Calc. 速算-多功能計算機】是一套簡易、清楚、直覺多功能的計算機,秉持著【簡潔】的設計理念,結合「經常使用」的計算模組,所開發出的計算機,全模組皆自行開發,非使用第三方計算機共用模組!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News