ecomdev/mysql-test-utils

为编写依赖于MySQL作为数据存储的软件的自动化测试而提供的MySQL测试工具的最小化版本。

1.0.0 2020-06-09 13:57 UTC

This package is auto-updated.

Last update: 2024-09-16 05:08:09 UTC


README

为编写依赖于MySQL作为数据存储的软件的自动化测试而提供的MySQL测试工具的最小化版本。

此包与任何类型的MySQL配置配合使用都非常出色,只要测试用户可以创建自己的数据库。每个数据库类实例都会在服务器上创建一个新唯一数据库,并在测试用例完成后删除。

配置

在您的PHPUnit xml中,您需要指定MySQL连接的设置以及mysql客户端的可执行文件。

下面是一个具有docker-compose数据库设置的phpunit xml配置示例。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.2/phpunit.xsd"
   bootstrap="vendor/autoload.php">
    <testsuite name="MySQL Test Utils Suite">
        <directory suffix="Test.php">tests/</directory>
    </testsuite>
    <php>
        <env name="MYSQL_PASSWORD" value="tests" />
        <env name="MYSQL_USER" value="root" />
        <env name="MYSQL_HOST" value="127.0.0.1" />
        <env name="MYSQL_CLIENT" value="docker-compose exec -T mysql mysql" />
    </php>
</phpunit>
version: "3"
services:
  mysql:
    image: percona/percona-server:5.7
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: tests

示例

每次测试都会创建数据库

use PHPUnit\Framework\TestCase;
use EcomDev\MySQLTestUtils\DatabaseFactory;

class SomeDatabaseRelatedTest extends TestCase
{
    private $database;
    
    protected function setUp() : void
    {
         $this->database = (new DatabaseFactory())->createDatabase();
         $this->database->loadFixture('some/path/to/schema.sql');
    }
    
    public function testSomethingIsWritten() 
    {
        $this->assertEquals(
            [
                ['value1', 'value2']
            ],
            $this->database->fetchTable('some_table_name', 'column1', 'column2')
        );
    }
}

每次测试类都会创建数据库

use PHPUnit\Framework\TestCase;
use EcomDev\MySQLTestUtils\DatabaseFactory;

class SomeDatabaseRelatedTest extends TestCase
{
    private static $database;
    
    public static function setUpBeforeClass() : void
    {
         self::$database = (new DatabaseFactory())->createDatabase();
         self::$database->loadFixture('some/path/to/schema.sql');
    }
    
    public static function tearDownAfterClass() : void
    {
         self::$database = null;
    }

    public function testSomethingIsWritten() 
    {
        $this->assertEquals(
            [
                ['value1', 'value2']
            ],
            self::$database->fetchTable('some_table_name', 'column1', 'column2')
        );
    }
}