# 模拟系统类

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

## 缓存

可通过 `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);