單元測試內實現屬性自動繫結

gordensong發表於2021-08-26

單元測試自動繫結屬性。
你可以將第 1 步,第三步寫 TestCase 裡面,自己的單元測試裡面執行第二步,第四步。

屬性自動繫結不僅限單元測試使用,Repository, Service, Action 同樣可以使用。

composer require --dev gordensong/laravel-autowire

自動繫結屬性

1. 引用 Trait

use AutoWireTrait;

2. 使用註解宣告繫結屬性

#[AutoWire]
private ?Cat $cat = null; // 必須有預設值

3. 繫結值為空的屬性

$this->autoWireProperties();

4. 呼叫繫結的屬性

self::assertSame('miao', $this->cat->miao());

demo

<?php

namespace Tests;

class Cat
{
     public function miao(): string { 
         return 'miao';
    }
}
<?php

namespace Tests;

use GordenSong\Laravel\Support\AutoWire;
use GordenSong\Laravel\Support\AutoWireTrait;

class AutoWireTest extends TestCase
{
     // 第一步:引用 Trait use AutoWireTrait 
    use AutoWireTrait;

    // 第二步:使用註解宣告繫結屬性
    #[AutoWire] 
    private ?Cat $cat = null;

    protected function setUp(): void { 
        parent::setUp();
         // 第三步: $this->autoWireProperties(); 繫結值為空的屬性
          $this->autoWireProperties(); // !!! 
    }

    public function test_autowire() { // 第四步:呼叫繫結的屬性
        self::assertSame('miao', $this->cat->miao()); 
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章