模拟系统类

框架中的几个组件在测试期间提供了他们类的模拟版本。这些类可以在测试执行期间取代正常的类,通常提供额外的断言来测试执行过程中是否发生了某些操作(或没有发生)。这可能是检查数据是否正确缓存,电子邮件是否正确发送等等。

缓存

你可以使用 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);