Laravel開發:如何使用Laravel Testing進行高效率的單元測試?
Laravel是PHP開發的領先框架,因其易學易用,功能完善,被廣大PHP開發者所喜歡。在開發過程中,測試是至關重要的,因為良好的測試可以提高應用程式的品質和穩定性。
Laravel框架內建了Laravel Testing工具,可以幫助開發者快速編寫高效的單元測試。本文將介紹如何使用Laravel Testing進行高效率的單元測試。
為什麼要進行單元測試?
在開發過程中,單元測試是非常重要的環節。它們可以幫助開發者:
利用單元測試可以大幅降低程式碼開發中出現問題的風險,並提升程式碼的品質和穩定性。
使用Laravel Testing進行單元測試的好處
為了進行單元測試,開發者需要使用測試框架以確保測試案例的正常運行,並快速捕獲問題和錯誤。 Laravel Testing是Laravel框架中非常受歡迎的測試框架。該框架具有以下好處:
Laravel Testing的基本架構
在撰寫測試案例之前,需要先了解Laravel Testing的基本架構。 Laravel測試案例和其他Laravel元件一樣,也是一個類別。該類別應該繼承PHPUnitFrameworkTestCase類,並且可以存取Laravel框架中的各種服務。例如,測試中需要存取控制台命令,可以使用Artisan :: call方法。
Laravel Testing的基本架構如下所示:
<?php namespace TestsUnit; use PHPUnitFrameworkTestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function testBasicTest() { $this->assertTrue(true); } }
該類別包含了一個測試案例範例方法testBasicTest()。由於測試方法應該被視為一個單獨的單一測試,因此最好根據測試的目的來命名測試方法。
編寫測試案例
編寫測試案例的流程通常分為以下步驟:
定義測試
定義測試案例的過程通常涉及以下幾個方面。
設定測試環境
在測試開始前,需要設定測試環境。透過建立.env.testing文件,在其中設定測試環境變數。 Laravel框架會自動在載入應用程式時偵測到該文件,並且預設使用該文件中的設定。
.env.testing範例:
APP_NAME=Laravel APP_ENV=testing APP_KEY= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=sqlite DB_DATABASE=:memory:
其它設定也可以在.env.testing檔案中新增或修改。在這裡,我們將使用sqlite資料庫,這是一個輕量級且易於測試的資料庫引擎。
使用sqlite資料庫時,Laravel會自動完成資料的遷移,因此不需要手動遷移。在測試方法中存取資料庫時,Laravel將自動使用在資料庫中放置資料的遷移。因此,在測試運行期間,不需要手動定義模式。
寫一個簡單的範例測試:
tests/Unit/ExampleTest.php
<?php namespace TestsUnit; use PHPUnitFrameworkTestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function testBasicTest() { $this->assertTrue(true); } }
在控制台中執行此測試,使用以下命令:
phpunit tests/Unit/ExampleTest.php
執行此測試後,將在控制台中輸出測試結果:
PHPUnit 8.5.1 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 00:00.010, Memory: 6.00 MB OK (1 test, 1 assertion)
可以看到,測試成功通過。
使用Laravel資料庫
有時,我們需要存取Laravel應用程式內部定義的實際資料庫。當在應用程式中使用Laravel的DB門面時,Laravel會自動選擇目前的應用程式環境。
透過以下方法可以進行測試:
$this->assertDatabaseHas('users', [ 'email' => 'test@example.com' ]);
此測試方法測試使用者儲存和檢索。在這裡,我們使用assertDatabaseHas()將斷言新增至測試資料是否存在。
如果想要將記錄插入到資料庫中, 可以使用以下方法:
$user = factory(User::class)->create(); $this->assertDatabaseHas('users', [ 'email' => $user->email ]);
使用偽造物件
你可以使用Laravel提供的Mockery物件庫產生模擬物件和傳遞依賴。使用Mockery模擬框架代替昂貴,硬編碼的對象,然後利用這些模擬服務以及其他依賴項,測試對像或更大的元件。
Mockery可以大幅簡化你的程式碼,從而提高你的應用程式的品質和可維護性。
$string = Mockery::mock('IlluminateHttpRequest');
$string->shouldReceive('input')
->once() ->andReturn('Welcome to Laravel Testing');
$this->assertTrue(strlen($string->input()) === 23);
在上面的代码示例中,我们首先创建了一个伪造对象$string,它是IlluminateHttpRequest的模拟实例。然后我们编写测试用例来测试模拟实例$input方法的返回值。
完成这些步骤后,我们便可以快速编写测试用例,取得高效、可维护、高质量的程序。
总结
直接就知道程序的运行结果是不能保证代码完美运作,甚至有可能出现严重的错误。而单元测试能够较全面地检测应用程序的每个组成部分,从而确保应用程序的质量与稳定性。
在Laravel框架中,Laravel Testing是一种流行的测试框架。Laravel Testing是受欢迎的,因为它易于使用,与Laravel框架深度结合,并且具有广泛的使用情况与应用。
在编写测试用例时,应确保测试方法的名称明确地描述了测试的功能。在测试方法中,使用assert()和其他相关断言操作来测试方法。完成测试后,可以使用PHPUnit来运行测试。
因为Laravel Testing已经在Laravel框架中集成,所以它使得开发人员可以轻松地测试他们的应用程序。Laravel Testing使开发人员能够更自信地修改和更新代码,并确保不会对任何现有功能产生负面影响。
以上是Laravel開發:如何使用Laravel Testing進行高效率的單元測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!