Esta suite de tests proporciona cobertura completa para el PhobosFramework Database Layer.
tests/
├── Unit/ # Tests unitarios
│ ├── QueryBuilder/
│ │ ├── Clauses/ # Tests para cláusulas SQL
│ │ │ ├── LimitClauseTest.php
│ │ │ ├── JoinClauseTest.php
│ │ │ └── WhereClauseTest.php
│ │ ├── DeleteQueryTest.php
│ │ └── InsertQueryTest.php
│ ├── Connection/
│ │ └── TransactionManagerTest.php
│ └── Drivers/
│ └── AbstractDriverTest.php
└── Integration/ # Tests de integración
└── EntityCRUDTest.php
composer installcomposer test
# o directamente:
./vendor/bin/phpunit./vendor/bin/phpunit --testsuite=Unit./vendor/bin/phpunit --testsuite=Integrationcomposer test-coverageEsto generará un reporte HTML en coverage/index.html.
# Un archivo específico
./vendor/bin/phpunit tests/Unit/QueryBuilder/Clauses/LimitClauseTest.php
# Una clase específica
./vendor/bin/phpunit --filter LimitClauseTest
# Un método específico
./vendor/bin/phpunit --filter test_set_limit_accepts_valid_value- LimitClauseTest: Valida LIMIT y OFFSET con validaciones de valores negativos
- JoinClauseTest: Valida tipos de JOIN y normalización de sintaxis
- WhereClauseTest: Valida condiciones WHERE, IN clauses y arrays vacíos
- DeleteQueryTest: Valida construcción de DELETE queries con LIMIT
- InsertQueryTest: Valida INSERT simple y múltiple con validación de columnas
- TransactionManagerTest: Valida transacciones anidadas, savepoints, commit y rollback
- AbstractDriverTest: Valida configuración de drivers, charset sanitization y savepoints
- EntityCRUDTest: Valida operaciones completas de CRUD, change tracking, clonación y transacciones en un ambiente SQLite real
- Recursión infinita en EntityManager::__set()
- SQL injection en AbstractDriver::configure()
- Validación de LIMIT negativo en DeleteQuery
- Validación de savepoints en TransactionManager
- Validación de columnas consistentes en InsertQuery
- Validación de arrays vacíos en IN clauses
- Validación de PK en TableEntity::performUpdate()
- Implementación de __clone() en EntityManager
- Protección de singletons
- Validación de LIMIT/OFFSET negativos en LimitClause
- Validación de tipos de JOIN en JoinClause
- Consistencia en excepciones custom del framework
Los tests utilizan Mockery para crear mocks de:
ConnectionInterface: Para simular conexiones sin BD realPDO: Para simular operaciones de base de datos
La configuración de PHPUnit está en phpunit.xml:
<php>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>Los tests de integración usan SQLite en memoria para ejecutarse rápidamente sin necesidad de configuración externa.
<?php
namespace PhobosFramework\Database\Tests\Unit;
use PHPUnit\Framework\TestCase;
class MyNewTest extends TestCase {
public function test_something(): void {
// Arrange
$expected = 'value';
// Act
$actual = someFunction();
// Assert
$this->assertEquals($expected, $actual);
}
}<?php
namespace PhobosFramework\Database\Tests\Integration;
use PHPUnit\Framework\TestCase;
class MyIntegrationTest extends TestCase {
protected function setUp(): void {
// Setup database connection
}
protected function tearDown(): void {
// Cleanup
}
public function test_integration_scenario(): void {
// Test end-to-end functionality
}
}Para integrar estos tests en tu pipeline de CI/CD:
# Ejemplo para GitHub Actions
- name: Run tests
run: composer test
- name: Generate coverage
run: composer test-coverage- Los tests están diseñados para ser independientes y pueden ejecutarse en cualquier orden
- Los tests de integración limpian el estado después de cada ejecución
- Se usa SQLite en memoria para tests rápidos y sin dependencias externas
- Los mocks permiten probar lógica sin conexiones reales a BD