vierge-noire / cakephp-test-suite-light
基于 Sql 查询的 CakePHP 应用程序测试套件
Requires
- php: >=8.1
- ext-pdo: *
- cakephp/cakephp: ^5.0
Requires (Dev)
- cakephp/migrations: 4.x-dev
- josegonzalez/dotenv: ^4.0.0
- phpunit/phpunit: ^10.1
- dev-main
- v3.0
- v2.4
- v2.3
- v2.2.1
- v2.2
- 2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0
- v1.3
- v1.2.1
- v1.2
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0
- dev-cake5
- dev-next
- dev-#50_merge_abstract_sniffers
- dev-#47-pipeline-fix
- dev-cake3
- dev-cake3-next
- dev-#40__cake3__shorten_trigger_prefix
- dev-#40_shorten_trigger_prefix
- dev-#25_cake3_truncation_policy_refinement
- dev-#25_truncation_policy_refinement
- dev-#6_cake3_fixture_analyzer
- dev-#6-fixture-analyzer
- dev-transactions
This package is auto-updated.
Last update: 2024-09-06 14:06:43 UTC
README
为 CakePHP 应用程序提供的快速测试套件
适用于 CakePHP 5.x
composer require --dev vierge-noire/cakephp-test-suite-light "^3.0"
适用于 CakePHP 4.x
composer require --dev vierge-noire/cakephp-test-suite-light "^2.0"
适用于 CakePHP 3.x
composer require --dev vierge-noire/cakephp-test-suite-light "^1.0"
安装
监听器
对于 CakePHP ^4.3 应用程序,不需要额外的监听器。请参阅此处的文档。
CakePHP 4.3 之前
请确保您在您的 phpunit.xml
(或 phpunit.xml.dist
)配置文件中替换本机 CakePHP 监听器为以下内容,默认位于应用程序根目录
<!-- Setup a listener for fixtures -->
<listeners>
<listener class="CakephpTestSuiteLight\FixtureInjector">
<arguments>
<object class="CakephpTestSuiteLight\FixtureManager" />
</arguments>
</listener>
</listeners>
在每个测试之间,该软件包将截断之前测试中使用的所有测试表。
固定数据将在您在 配置 中定义的测试数据库中创建。
重要:您不应将 CakePHP 本机监听器 添加到您的 phpunit.xml
文件。只需要一个监听器,即 安装 部分中描述的监听器。
截断表
在 CakePHP ^4.3 中
在测试用例类中使用 CakephpTestSuiteLight\Fixture\TruncateDirtyTables
特性,以便在每个测试开始之前清理数据库。
CakePHP ^4.3 之前
默认情况下,该软件包将清空所有测试数据库中的脏表。
如果您想忽略特定测试用例的截断,可以使用 CakephpTestSuiteLight\SkipTablesTruncation
特性
如果您想忽略特定的连接,可以在您的 config/app.php
中将 skipInTestSuiteLight
键设置为 true
。例如:
In config/app.php
<?php
...
'test_connection_to_be_skipped' => [
'className' => Connection::class,
'driver' => Mysql::class,
'persistent' => false,
...
'skipInTestSuiteLight' => true
],
这可能在您有连接到云中第三方服务器的情况中很有用。
测试生命周期
以下是固定数据工厂固定数据管理器执行的唯一步骤,以及如何禁用它。
截断表
固定数据管理器在每个测试的开始截断脏表。这是唯一执行的操作。
脏表是主键至少增加了一次的表。脏表的检测是通过专用的类进行的 SQL 查询。这些是 TableSniffers
,位于软件包的 src/TestSuite/Sniffer
文件夹中。这些是为以下目的提供的:
- SQLite
- MySQL
- Postgres(Postgresql 支持 >= 11。对于较低的 Postgres 版本,需要自定义 Sniffer。)
如果您使用不同的数据库引擎,可以提供自己的。它应该扩展 BaseTableSniffer
类。
然后,在您的 config/app.php
文件中将驱动程序映射到每个相关连接的自定义表 Sniffer。例如:
In config/app.php
<?php
...
'test' => [
'className' => Connection::class,
'driver' => Mysql::class,
'persistent' => false,
...
'tableSniffer' => '\Your\Custom\Table\Sniffer'
],
临时与非临时脏表收集器
当前测试套件的一个优点在于,测试数据库在每个测试之前被清理,而不是之后。这使得开发人员能够在测试数据库中执行查询,并观察特定测试留下的数据库状态。
当前插件通过触发器在专用表中收集脏表。默认情况下,该表是永久的,但可以设置为临时,以便在代码中保持不可见。
为此,在您的测试数据库设置中,将键'dirtyTableCollectorMode'
设置为'TEMP'
。
使用CakePHP测试夹具
仍然可以使用原生CakePHP夹具。为此,您可以按照以下方式加载它们,如这里所述。
统计工具
套件附带一个统计工具。这将存储每个测试的执行时间、测试名称、脏表数量和列表。
要激活它,请在以下方式中将FixtureInjector
的第二个参数设置为true。
<!-- Setup a listener for fixtures -->
<listeners>
<listener class="CakephpTestSuiteLight\FixtureInjector">
<arguments>
<object class="CakephpTestSuiteLight\FixtureManager" />
<boolean>true</boolean>
</arguments>
</listener>
</listeners>
统计信息将在每个测试套件之后存储在tmp/test_suite_light/test_suite_statistics.csv
中。
借助您的IDE,您可以轻松排序结果并跟踪慢速测试,以提高其性能。
请注意,统计工具不会在数据库中执行任何查询。它使用在激活与否的情况下都会收集的信息。它对测试的整体速度没有显著影响。
作者
- Juan Pablo Ramirez
- Nicolas Masson
支持
如果您需要专业帮助,请联系我们:[email protected]
许可证
CakephpTestSuiteLight插件在MIT许可证下提供。
版权所有 2020 Juan Pablo Ramirez和Nicolas Masson
许可协议:MIT许可证。文件的分发必须保留上述版权声明。