raphhh / pumpkin
PHPUnit 中用于模拟和数据库资源的辅助工具
Requires
- php: >=5.4
- doctrine/annotations: ^1.2
- phpunit/dbunit: *
- phpunit/phpunit: *
- raphhh/trex-parser: ^1.1
README
什么是Pumpkin?
Pumpkin可以帮助您组织PHPUnit测试中的模拟存储。当您执行测试时,它提供模拟对象和数据库资源。
如何开始?
您只需在composer.json中添加Pumpkin包,并更新您的项目。
$ composer require raphhh/pumpkin
我能做什么?
获取当前测试
通常,当您使用PHPUnit时,您会创建一个新的测试类,扩展\PHPUnit_Framework_TestCase
。相反,使用Pumpkin,您必须扩展\Pumpkin\TestCase
。
\Pumpkin\TestCase
扩展\PHPUnit_Framework_TestCase
,因此您具有与使用PHPUnit相同的接口。
但是,您也可以使用\Pumpkin\TestCase::getTest(
)来获取当前测试。您将收到一个\Pumpkin\Test\Test
对象,该对象反映了当前测试的方法。
当前测试是PHPUnit执行的包含您断言的方法。通常,这是一个测试*方法。
例如
class FooTest extends Pumpkin\TestCase { function testA(){ $this->getTest()->getReflectedTestMethod()->getName(); //FooTest::testA } function testB(){ $this->getTest()->getReflectedTestMethod()->getName(); //FooTest::testB } }
使用此方法,您可以反射执行测试的方法,检索注释,...等等!
请注意,如果您不想扩展\Pumpkin\TestCase
,您也可以直接扩展\PHPUnit_Framework_TestCase
并使用特性\Pumpkin\Test\TestCaseTrait
。
获取当前测试的模拟
您可以检索当前测试的模拟。模拟对象必须是用户对象。它们在为当前测试指定的特定文件中声明。
该文件位于以下路径
/fixtures/mocks/{ClassTestName}/{methodName}.php
此路径可以从测试目录或父目录开始。
您可以在该文件中声明任意数量的模拟。
例如
//Mocks // /fixtures/mocks/FooTest/testA.php class Mock1{} class mock2{}
// Test case class FooTest extends Pumpkin\TestCase { function testA(){ $this->getMocks(); //returns [Mock1, Mock2] } }
使用特定数据重置当前测试的数据库
当您想要使用PHPUnit模拟数据库时,您需要使用\PHPUnit_Extensions_Database_TestCase
。相反,使用Pumpkin,您必须扩展\Pumpkin\Database\TestCase
。
\Pumpkin\Database\TestCase
扩展\PHPUnit_Extensions_Database_TestCase
,因此您具有与使用PHPUnit相同的接口。
请注意,如果您不想扩展\Pumpkin\Database\TestCase
,您也可以直接扩展\PHPUnit_Extensions_Database_TestCase
并使用特性\Pumpkin\Test\Database\TestCaseTrait
。
注释
但是,您也可以指定当前测试要加载的表。这是在当前测试的注释中通过@db标签完成的。
// Test case use Pumpkin\Database\Annotation as db; class FooTest extends Pumpkin\Database\TestCase { /** * @db("my_database.my_table") * @db("my_other_database.my_other_table") */ function testA(){ //my_database.my_table and my_other_database.my_other_table data will be load when this test will be executed } }
数据文件
数据存储在以下路径的文件中
/fixtures/databases/{databaseName}/data/{tableName}.csv
目前,Pumpkin只支持csv文件,但未来可能会有所发展。
您的数据可以针对当前测试特定,也可以与多个测试通用。所有这些都由数据文件路径确定。如果您需要特定数据,您必须将数据文件定位在测试目录中。如果您需要通用数据,您必须将数据文件定位在测试的公共目录中。
数据库配置
如果您想要加载模拟数据,您必须允许PHPUnit访问您的数据库。使用Pumpkin,您只需在phpunit.xml中指定您的配置即可。
例如
<phpunit> <php> <var name="db_dsn" value="mysql:dbname=my_db;host=127.0.0.1"/> <var name="db_username" value="root"/> <var name="db_password" value=""/> </php> ... other phpunit config </phpunit>