模拟系统类

框架内置了多个组件,并提供相应的模拟类以辅助测试。执行测试时,模拟类可替代常规类,且通常附带额外的断言,用于验证特定操作是否已执行(或未执行)。例如,校验数据是否正确缓存、邮件是否成功发送等。

缓存

可通过 mock() 方法模拟缓存,将 CacheFactory 作为唯一参数传入。

<?php

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

此方法在返回可直接使用的 CodeIgniter\Test\Mock\MockCache 实例之余,还会将该模拟对象注入到 Service 类。这意味着后续代码中所有对 service('cache')Config\Services::cache() 的调用,都将自动替换为该模拟类。

若在同一个文件的多个测试方法中使用此功能,应在测试的 setUp() 阶段调用 clean()bypass() 方法,以确保每次测试运行时环境状态均已重置。

其他方法

调用 bypass() 方法可禁用模拟缓存处理器的缓存功能。该操作通过模拟 Dummy 处理器的行为,确保测试过程不会受到缓存数据的干扰。

<?php

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

可用断言

模拟类提供以下额外断言,可在测试中使用:

<?php

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

// Assert that a cached item named $key exists
$mock->assertHas($key);
// Assert that a cached item named $key exists with a value of $value
$mock->assertHasValue($key, $value);
// Assert that a cached item named $key does NOT exist
$mock->assertMissing($key);