lisincin/modera-foundation-testing-tools

dev-master / 2.x-dev 2022-01-13 14:53 UTC

This package is auto-updated.

Last update: 2024-09-13 20:10:54 UTC


README

Modera\FoundationBundle 添加一些测试工具。

安装

将此依赖项添加到您的 composer.json 文件中

"modera/foundation-bundle": "dev-master",
"lisincin/modera-foundation-testing-tools": "~1.0"

更新您的 AppKernel 类并在此处添加 ModeraFoundationBundle 声明

new Modera\FoundationBundle\ModeraFoundationBundle(),

文档

功能测试

Modera\FoundationBundle\FunctionalTestCase 允许您通过以下方式提高测试编写速度:

  • kernel 启动(这实际上是通过重写和运行 static::createClient() 实现的)
  • 实体管理器创建
  • 数据库创建/删除/清除

预定义变量

  • $keepDatabase。如果为 true,则测试将重用现有表(如果存在)。提高开发期间测试重运行速度。
  • $useTransaction。如果为 true,则所有数据库活动都将包裹在事务中。数据库清除速度提高。适用于 CI 和单次运行。
  • $client。预定义客户端。
  • $container。当前启动的 kernel 的容器。
  • $em。当前 kernel 的实体管理器。
  • $st。当前 kernel 的模式工具。

请勿重启(创建新)kernel。这可能导致意外的实体管理器行为。

测试用例初始化

此测试用例引入了新的测试用例初始化。所有准备工作(客户端创建、实体管理器初始化、数据库准备、事务启动)都在 init 方法中完成。如果需要在之前执行某些操作,请使用 preInit 方法。如果需要访问某些服务或其他 symfony 内部组件,在 symfony 初始化覆盖之后初始化一些组件,请使用 postInit 方法。

测试流程常规

隔离

有两种隔离级别:方法和类。通过重写 getIsolationLevel() 来修改。

  • 类隔离级别。这意味着数据库将只创建/清除一次,kernel 也将只启动一次。在所有测试之前。每次下一个测试都将基于上一个测试的结果运行。如果想要重用用户身份验证,例如,则可使用。

  • 方法隔离级别。在每次测试之前都将清除数据库并启动 kernel。

表创建

大多数功能测试最终都会使用数据库。FunctionalTestCase 允许您简化此过程。

重写 getDatabaseTableList 方法。此方法应返回使用中的实体 ClassMetadata 的数组。

表重用

要保留和重用数据库表,请重写

static $keepDatabase = true;
使用事务代替表清除
static $useTransaction = true;
多对多实体清除

在多对多连接的情况下,简单地逐个删除表可能导致外键错误。为了避免这种情况,请使用 preClear 方法解决(删除)这些实体。

简单的测试用例示例
class SimpleTestCase extends FunctionalTestCase
{
    /**
     * @var SimpleService
     */
    static private $simpleService

    static public function postInit()
    {
       static::$simpleService = static::$container->get('simple.service');  
    }
    
    static protected function getDatabaseTableList()
    {
       return [
           static::$em->getClassMetadata('\Acme\AppBundle\Entity\SimpleEntity');
       ]
    }
    
    function testSimpleTestCase()
    {
         // do some test stuff here
    }
}

基本的 phpunit 方法覆盖

方法覆盖列表。

  • setUpBeforeClass。通过重写 doSetUpBeforeClass 模板方法来使用 setUpBeforeClass。
  • tearDownAfterClass。重写 doTearDownAfterClass
  • setUp。重写 doSetUp
  • tearDown。重写 doTearDown

许可

此捆绑包受 MIT 许可证的保护。有关完整的许可证信息,请参阅捆绑包中的 Resources/meta/LICENSE。