PHPUnit 與 Mockery 寫法差異

2023/09/06閱讀時間約 3 分鐘

在 Laravel 中的測試中,PHPUnit 和 Mockery 都可以用來創建測試替身(test double),但它們有不同的方式和功能,以下簡單介紹兩種寫法方式。

Dummy

根據上一章講解,Dummy Object 是一個不執行實際操作的替身物件,僅用於滿足方法或函數的參數要求。以下是PHPUnit 與 Mockery兩種寫法差異,這邊可以看到 $dummy 其實就只是一個滿足方法參數的要求,但實際上不進行操作或計算。

phpunit

dummy = $this->createMock(Calculater::class);

mockery

dummy = \\Mockery::mock(Calculater::class);

Stub

Stub 用於模擬對象的行為,通常是為了返回預定義的值或拋出預定義的異常。這對於模擬對象的方法返回值非常有用,可以確保測試的可預測性。

phpunit

$stub = $this->createStub(Calculater::class);
$stub->method('add')->willReturn(0);

mockery

stub = \\Mockery::mock(Calculater::class);
stub->shouldReceive('add')->andReturn(0);

Spy

Spy 用於記錄對象方法的調用和參數,通常用於驗證方法的調用情況,而不是改變方法的行為。

phpunit

$spy = $this->createMock(Calculater::class);
$spy->expect($this->exactly(2))->meth('add');

mockery

$spy = \\Mockery::mock(Calculater::class);
spy->shouldReceive('add')->times(2);

Mock

Mock 用於模擬對象的行為,並可以設置期望執行次數來驗證對象的方法是否按照預期被調用。這對於測試對象之間的交互非常有用。

phpunit

$mock =  $this->createMock(Calculater::class);
$mock->expect($this->once())
->meth('add')
->with(1,1)
->willReturn(2);

mockery

$mock = \Mockery::mock(Calculater::class); 	
$mock->shouldReceive('add')
->once()
->with(1,1)
->andReturb(2);


小結:這邊列出上述 Test Double 兩種不同的範例程式碼,在Laravel 中我們可以根據測試場景選擇適合的替身類型,以確保單元測試和整合測試是準確可驗證,下一章將直接練習邏輯撰寫,並實作 Unit Test 及 Feature Test 測試。

下一章練習邏輯測試行為撰寫

PHPUnit 單元測試練習

如果對單元測試整合測試的基本理論不太理解,可以參考上一篇

單元測試與整合測試簡述




13會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
發表第一個留言支持創作者!