// 1. In-memory SQLite
$pdo = new PDO('sqlite::memory:');
$pdo->exec(file_get_contents('schema.sql'));
// 2. Laravel: RefreshDatabase trait
class UserTest extends TestCase {
use RefreshDatabase;
public function testCreate(): void {
User::factory()->create(['name' => 'John']);
$this->assertDatabaseHas('users', ['name' => 'John']);
}
}
// 3. Testcontainers - реальная БД в Docker
// 4. Транзакции - откат после каждого теста
// 5. Fake repository - in-memory реализацияРекомендация: unit-тесты с fake repository, интеграционные - с реальной БД (транзакции или RefreshDatabase).