使用koriym/null-object快速生成NullObject,提升PHP單元測試效率

在進行 php 單元測試時,我們經常需要模擬一些依賴對象,以便隔離被測試的代碼。NULL Object 是一種常用的設計模式,它提供了一個具有相同接口但什么都不做的對象,用于替代那些在特定測試場景下不需要實際功能的依賴對象。

手動創建 null object 是一項重復且繁瑣的任務。為了解決這個問題,我發現了一個非常有用的 php 庫:koriym/null-object。這個庫可以根據接口自動生成 null object,極大地簡化了單元測試的編寫過程。

可以通過一下地址學習composer學習地址

koriym/null-object 的主要功能是:

  • 根據接口生成 Null Object: 自動創建一個實現了指定接口的 Null Object 類。
  • 支持動態創建和保存到文件: 可以動態創建 Null Object,也可以將生成的代碼保存到文件中。
  • On-the-fly 模式: 通過注冊自動加載器,可以簡單地通過在接口名稱后添加 Null 后綴來創建 Null Object。

安裝

使用 composer 安裝 koriym/null-object 非常簡單:

立即學習PHP免費學習筆記(深入)”;

composer require --dev koriym/null-object

使用示例

假設我們有以下接口:

interface FooInterface {     public function doSomething(): void;     public function getValue(): string; }

使用 koriym/null-object 可以這樣生成 Null Object:

use KoriymNullObjectNullObject;  class MyTest extends TestCase {     private NullObject $nullObject;      protected function setUp(): void     {         $this->nullObject = new NullObject();     }      public function testNullObject(): void     {         $nullObject = $this->nullObject->newInstance(FooInterface::class);         $this->assertInstanceOf(FooInterface::class, $nullObject);         $nullObject->doSomething(); // 什么都不會發生         $this->assertSame('', $nullObject->getValue()); // 返回默認值     } }

On-the-fly 模式

koriym/null-object 還提供了一種更便捷的 On-the-fly 模式。首先,需要在 composer.json 中注冊自動加載器:

"autoload-dev": {     "files": ["./vendor/koriym/null-object/autoload.php"] }

然后,就可以直接通過在接口名稱后添加 Null 后綴來創建 Null Object:

$nullClass = FooInterface::class . 'Null'; $foo = new $nullClass; $this->assertInstanceOf(FooInterface::class, $foo);

總結

koriym/null-object 是一個非常實用的 PHP 庫,可以幫助我們快速生成 Null Object,從而簡化單元測試的編寫過程,提高開發效率。其 On-the-fly 模式更是方便快捷,值得在項目中嘗試使用。

優點:

  • 快速生成 Null Object,減少重復代碼。
  • 提高單元測試效率。
  • On-the-fly 模式使用方便。

缺點:

總的來說,koriym/null-object 是一個值得推薦的 PHP 單元測試輔助工具

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享