ecomdev / mysql-test-utils
为编写依赖于MySQL作为数据存储的软件的自动化测试而提供的MySQL测试工具的最小化版本。
1.0.0
2020-06-09 13:57 UTC
Requires (Dev)
- phpunit/phpunit: ^9.2
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') ); } }