模拟系统类
框架中的几个组件在测试期间提供了他们类的模拟版本。这些类可以在测试执行期间取代正常的类,通常提供额外的断言来测试执行过程中是否发生了某些操作(或没有发生)。这可能是检查数据是否正确缓存,电子邮件是否正确发送等等。
缓存
你可以使用 mock()
方法模拟缓存,其唯一参数为 CacheFactory
。
<?php
$mock = mock(\CodeIgniter\Cache\CacheFactory::class);
虽然这会返回可以直接使用的 CodeIgniter\Test\Mock\MockCache
实例,但它也会将模拟插入到服务类中,因此代码中的任何对 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);