raphhh/pumpkin

PHPUnit 中用于模拟和数据库资源的辅助工具

2.0.0 2015-12-28 22:10 UTC

This package is auto-updated.

Last update: 2024-08-25 21:43:45 UTC


README

Latest Stable Version Build Status Scrutinizer Quality Score Code Coverage

什么是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>