Назад к вопросам
Middle
160
questionbank
Что такое мок и стабы? Чем они отличаются?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Моки и стабы — это типы тестовых дублеров, которые используются при модульном тестировании для имитации поведения реальных зависимостей объекта.
Стаб (Stub):
- Предоставляет "заст
<?php
// Пример стабового объекта
class StubDatabase {
public function getUserById(int $id): ?array {
// Имитация возвращаемого значения для конкретного ID
if ($id === 1) {
return ['id' => 1, 'name' => 'Test User'];
}
return null;
}
}
роено" поведение для тестового сценария.
- Отвечает на вызовы методов, возвращая заранее заданные значения.
- Не имеет логики проверки взаимодействия. Его цель — обеспечить тестовому объекту данные для продолжения работы.
Мок (Mock):
- Подобен стабу, но с добавленной логикой проверки взаимодействия.
- Содержит ожидания относительно того, какие методы должны быть вызваны, сколько раз и с какими аргументами.
- Тест проверяет не только результат работы тестируемого объекта, но и корректность его взаимодействия с моком.
<?php
// Пример мок-объекта
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\MockObject\MockObject;
class UserServiceTest extends TestCase {
public function testGetUserByIdCallsDatabase(): void {
$databaseMock = $this->createMock(Database::class);
$databaseMock->expects($this->once()) // Ожидаем один вызов метода
->method('getUserById')
->with(1) // Ожидаем аргумент 1
->willReturn(['id' => 1, 'name' => 'Test User']); // Ожидаем возвращаемое значение
$userService = new UserService($databaseMock);
$user = $userService->getUserById(1);
// Проверка результата работы, но также и проверка взаимодействия через мок
$this->assertNotEmpty($user);
$this->assertEquals('Test User', $user['name']);
}
}
Отличия в таблице:
| Характеристика | Стаб (Stub) | Мок (Mock) |
|---|---|---|
| Назначение | Предоставить данные для работы | Проверить взаимодействие и данные |
| Проверка | Не проверяет взаимодействие | Проверяет, как объект работает с ним |
| Логика поведения | Просто возвращает значения | Содержит ожидания вызовов |
Кто выполняет assert |
Тестируемый объект или клиент | Сам мок (через ожидания) |