como se realizan las pruebas unitarias a un crm con base de datos mysql pon ejemplos para php
Realizar pruebas unitarias en un CRM (Customer Relationship Management) que utiliza una base de datos MySQL implica verificar que las funciones individuales del sistema funcionan correctamente. En PHP, esto generalmente se hace utilizando un framework de pruebas como PHPUnit. A continuación, te mostraré un ejemplo básico de cómo podrías estructurar y realizar pruebas unitarias para un CRM con una base de datos MySQL.
Instalar PHPUnit: Si no lo tienes instalado, puedes instalarlo usando Composer:
composer require --dev phpunit/phpunit
Configurar PHPUnit: Crea un archivo phpunit.xml
en la raíz de tu proyecto para configurar PHPUnit.
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="CRM Test Suite">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
Supongamos que tienes una clase User
en tu CRM que interactúa con la base de datos. Primero, crea una clase de prueba para esta clase.
Estructura del proyecto:
/path/to/your/project
├── src
│ └── User.php
├── tests
│ └── UserTest.php
├── vendor
└── phpunit.xml
Clase User
:
// src/User.php
class User {
private $db;
public function __construct($db) {
$this->db = $db;
}
public function createUser($name, $email) {
$stmt = $this->db->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
return $stmt->execute([$name, $email]);
}
public function getUserByEmail($email) {
$stmt = $this->db->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
return $stmt->fetch();
}
}
Clase de prueba UserTest
:
// tests/UserTest.php
use PHPUnit\Framework\TestCase;
class UserTest extends TestCase {
private $pdo;
private $user;
protected function setUp(): void {
$this->pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Crear tabla de usuarios para pruebas
$this->pdo->exec("CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
)");
$this->user = new User($this->pdo);
}
protected function tearDown(): void {
// Eliminar tabla de usuarios después de las pruebas
$this->pdo->exec("DROP TABLE IF EXISTS users");
}
public function testCreateUser() {
$result = $this->user->createUser('John Doe', '[email protected]');
$this->assertTrue($result);
$stmt = $this->pdo->query("SELECT COUNT(*) FROM users WHERE email = '[email protected]'");
$count = $stmt->fetchColumn();
$this->assertEquals(1, $count);
}
public function testGetUserByEmail() {
$this->user->createUser('Jane Doe', '[email protected]');
$user = $this->user->getUserByEmail('[email protected]');
$this->assertNotNull($user);
$this->assertEquals('Jane Doe', $user['name']);
$this->assertEquals('[email protected]', $user['email']);
}
}
Para ejecutar las pruebas, simplemente usa el comando de PHPUnit:
vendor/bin/phpunit
Mocking: En pruebas más avanzadas, podrías querer usar mocks para simular la base de datos en lugar de interactuar con una base de datos real. Esto puede hacer que las pruebas sean más rápidas y aisladas.
Datos de prueba: Asegúrate de que los datos de prueba no interfieran con los datos reales. Utiliza una base de datos separada para pruebas o asegúrate de limpiar los datos después de cada prueba.
Transacciones: Puedes usar transacciones para asegurarte de que los cambios en la base de datos se reviertan después de cada prueba, manteniendo la base de datos en un estado limpio.
Este es un ejemplo básico para comenzar con las pruebas unitarias en un CRM con una base de datos MySQL usando PHP. A medida que tu aplicación crezca, querrás expandir y refinar tus pruebas para cubrir más casos y asegurar la calidad del código.