模擬系統類別

框架內的一些元件提供了類別的模擬版本,讓你可以在測試中使用。在測試執行的過程中,這些類別可以取代正常的類別。通常它們會提供額外的斷言,在測試執行的過程中是否正確動作(或沒有動作)。這可能是檢查資料被正確快取,電子郵件被正確發送,等等。

快取

你可以用 mock() 方法來模擬快取,只需使用 CacheFactory 作為參數進行傳入。

$mock = mock(CodeIgniter\Cache\CacheFactory::class);

這將回傳一個 CodeIgniter/TestMockMockCache 的實體,你可以直接使用它。同時,它也會將模擬插入到服務類別中,也就是說,在接下來你的程式對 service('cache')ConfigServices::cache() 的任何呼叫都將使用模擬的類別。

當你在一個檔案中的多個測試方法中使用了這個方法時,你應該在測試的 setUp() 過程中呼叫 clean()bypass() 方法,以保證測試案例執行時能夠有乾淨的環境。

附加方法

你可以用 bypass() 方法指揮模擬的快取處理程式不做任何快取。這將模擬使用虛擬的處理程式,並保證你的測試不依賴於快取的資料。

$mock = mock(CodeIgniter\Cache\CacheFactory::class);
// Never cache any items during this test.
$mock->bypass();

可用斷言

模擬類別提供了以下斷言,你可以在測試期間呼叫使用:

$mock = mock(CodeIgniter\Cache\CacheFactory::class);

// 斷言一個名為 $key 的快取存在
$mock->assertHas($key);
// 斷言名為 $key 的斷言存在並且數值為 $value
$mock->assertHasValue($key, $value);
// 斷言名為 $key 的快取不存在
$mock->assertMissing($key);