Код: Выделить всё
<?php
namespace tests\unit\services\user;
use app\models\User;
use app\services\User as UserService;
use Codeception\Test\Unit;
class UserTest extends Unit {
/**
* @var \UnitTester
*/
protected $tester;
protected function _before() { }
protected function _after() { }
/**
* @dataProvider getUsersForActivity
*/
public function testUserIsActive($user, $result) {
$userService = new UserService($user);
self::assertEquals($userService->isActive(), true);
}
public function getUsersForActivity() {
return [
[User::findOne(['id' => 1]) => true],
[User::findOne(['id' => 2]) => false],
[User::findOne(['id' => 456]) => false],
[User::findOne(['id' => 87]) => true],
// куча других пользователей
];
}
}
И вот таких провайдеров может быть десяток. В каждом из них модель обращается к БД, тянет данные и тестируется. Это слишком трудозатрадно для БД, учитывая, что это только пользователи, а могут быть ещё другие сотни тестов, которые ещё больше трудоёмкие.
Вопрос: как правильно делать интеграционное тестирование? Как правильно загрузить данные для прогона теста, чтобы это не загружать так БД? Например как-то создать кэшированный запрос и подставлять туда id из массива?