模拟系统类
框架中的几个组件提供了其类的模拟版本,这些版本可以在测试期间使用。这些类可以在测试执行期间代替正常类,通常提供额外的断言来测试在测试执行期间是否发生了操作(或未发生操作)。这可能是检查数据是否正确缓存、电子邮件是否正确发送等。
缓存
您可以使用 mock()
方法模拟缓存,使用 CacheFactory
作为其唯一参数。
<?php
$mock = mock(\CodeIgniter\Cache\CacheFactory::class);
虽然这会返回一个您可以直接使用的 CodeIgniter\Test\Mock\MockCache
实例,但它也会将模拟插入服务类中,因此您代码中对 service('cache')
或 Config\Services::cache()
的任何调用都将在其位置使用模拟类。
当在一个文件中使用多个测试方法时,您应该在测试 setUp()
中调用 clean()
或 bypass()
方法,以确保测试运行时有一个干净的环境。
其他方法
您可以使用 bypass()
方法指示模拟的缓存处理程序永远不要进行任何缓存。这将模拟使用虚拟处理程序,并确保您的测试不依赖于缓存数据。
<?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);