Mockery
Mockery — популярная библиотека мокирования для PHP с выразительным API (Mockery::mock(), expects(), spy()). Пакет testo/bridge-mockery интегрирует её с Testo.
Класс плагина: MockeryPlugin\Testo\Bridge\Mockery\MockeryPlugin. Не входит в состав плагинов по умолчанию.
Установка
composer require --dev mockery/mockery testo/bridge-mockeryПодключение
Зарегистрируйте MockeryPlugin\Testo\Bridge\Mockery\MockeryPlugin в секции plugins — на уровне приложения (для всех сьютов) или отдельного Test Suite (для конкретного набора тестов).
use Testo\Application\Config\ApplicationConfig;
use Testo\Bridge\Mockery\MockeryPlugin;
return new ApplicationConfig(
src: ['src'],
suites: [ /** Suites **/ ],
plugins: [
new MockeryPlugin(),
],
);use Testo\Application\Config\SuiteConfig;
use Testo\Bridge\Mockery\MockeryPlugin;
new SuiteConfig(
name: 'Unit',
location: ['tests/Unit'],
plugins: [
new MockeryPlugin(),
],
);Поведение проверок моков
Адаптер автоматически проверяет ожидания моков после каждого теста и связывает результат со статусами Testo — ручной teardown не нужен. Правило простое: задекларировали ожидание и выполнили — хорошо, не выполнили — ошибка.
- Выполненное ожидание засчитывается как проверка. Поэтому тест, где единственная проверка — мок, остаётся Status::Passed
\Testo\Core\Value\Status::Passed, а не Status::Risky\Testo\Core\Value\Status::Risky(этим статусом Testo помечает успешный тест без единой проверки — защита от забытого ассерта, см. Assert). - Невыполненное ожидание проваливает тест (Failed) и попадает в историю проверок как неуспешное.
#[Test]
public function notifies(): void
{
$mailer = Mockery::mock(Mailer::class);
$mailer->expects('send')->once(); // ожидание — и есть проверка
(new Notifier($mailer))->notify('hi'); // send() вызывается один раз, выполняя ожидание
}#[Test]
public function notifies(): void
{
$mailer = Mockery::spy(Mailer::class);
(new Notifier($mailer))->notify('hi');
// ни ожидания, ни ассерта — проверять нечего → Risky
}#[Test]
public function notifies(): void
{
$mailer = Mockery::mock(Mailer::class);
$mailer->expects('send')->once(); // ждём ровно один вызов send()
// …но notify() так и не вызвали → ожидание не выполнено → Failed
}Плагин настроен только на обычные тесты (например, помеченные атрибутом #[Test]#[Test()]Явно помечает метод, функцию или класс как тест.). Во встроенных тестах, бенчмарках и других моки автоматически не проверяются и не очищаются — этим придётся управлять самостоятельно средствами Mockery.