otgs / unit-tests-framework
用于构建OTGS产品单元测试的框架
Requires
- 10up/wp_mock: ^0.4
- lucatume/function-mocker: ^1.3
- phpunit/phpunit: ^8.5
- roave/security-advisories: dev-master
- symfony/css-selector: ^5.0
- symfony/dom-crawler: ^5.0
- dev-develop
- 3.0.0
- 2.0.0
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-revert-8-feature/systemsdev-3038
- dev-feature/systemsdev-3038
- dev-christian/wpmlsystem-34
- dev-phpunit-7b
- dev-phpunit-7a
- dev-phpunit-7
- dev-phpunit-5
- dev-php74
- dev-wpmlga-568
- dev-php-74
- dev-master
- dev-hotfix/wpmlga-524
- dev-toolset-mod
- dev-last-php52-compatible
- dev-fail-on-wpdb-errors
- dev-dep-updates
- dev-php7-bump
- dev-phpunit7-dev
- dev-fluent-mocks
- dev-lock-function-mocker-to-1.3.4
- dev-fix-function-mocker
- dev-new-stubs
- dev-remove-stubs
- dev-add_property_to_wp_query
- dev-wpmlcore-4171
- dev-wpmlcore-4184
- dev-stubs-removal
- dev-wp_send_json
- dev-wpmlcore-3198
This package is auto-updated.
Last update: 2024-08-31 00:31:18 UTC
README
- 在您的项目中创建一个
tests
目录 - 在
tests
目录下创建一个phpunit
子目录1 - 将
samples/phpunit.xml
文件复制到您的项目的根目录2- 将
test-suite-name
修改为适当的名称 - 您可能不需要修改该文件中的其他任何内容
- 将
- 将
samples/bootstrap.php
文件复制到tests/phpunit
- 阅读此文件中的注释并做出相应的修改
- 运行
composer require --dev otgs/unit-tests-framework
3 - 在
tests/phpunit
下创建另一个tests
子目录- 在这里编写您的测试
- 除非您自定义了
phpunit.xml
文件,否则您不需要以任何特定的方式命名测试文件和类
- 从项目的根目录运行
phpunit
以开始测试4
如何使用 OTGS_TestCase 类
为了充分利用这个库,您所有的测试类都应该扩展 OTGS_TestCase
。
一旦这样做,就会发生以下情况
\OTGS_TestCase::setupBeforeClass
:
$_GET
和$_POST
被设置为空数组- 提供
FactoryMuffin
的一个实例:您可以将其引用为self::$fm
(有关更多详细信息,请参阅“资源和依赖项”)
\OTGS_TestCase::setUp
FunctionMocker
已初始化(有关更多详细信息,请参阅“资源和依赖项”)WP_Mock
已初始化(有关更多详细信息,请参阅“资源和依赖项”)
\OTGS_TestCase::tearDown
WP_Mock
被销毁FunctionMocker
被销毁Mockery
被销毁(以防万一已使用过)
\OTGS_TestCase::tearDownAfterClass
- 删除使用
FactoryMuffin
创建的所有模型
模拟 WP 核心函数
此类还提供了一个辅助方法来快速模拟 WordPress 定义的函数,使用 \OTGS_TestCase::get_mocked_wp_core_functions
,该方法返回一个 OTGS_Mocked_WP_Core_Functions
实例。
OTGS_Mocked_WP_Core_Functions
使用与在 WordPress 代码库中定义函数的文件相同的名称来组织模拟
例如,要模拟 post.php
中定义的所有函数(如 get_post
),在您的测试中,您只需调用 $this->get_mocked_wp_core_functions()->post()
。
要模拟 add_query_arg
,请调用 $this->get_mocked_wp_core_functions()->functions()
,因为 add_query_arg
定义在 functions.php
。
OTGS_Mocked_WP_Core_Functions
尝试处理依赖关系。
因此,如果您调用$this->get_mocked_wp_core_functions()->post()
来模拟wp_insert_post
,您将自动调用$this->get_mocked_wp_core_functions()->post()
,因此还可以模拟所有与元数据相关的函数。
最后,您可以使用$this->mock_all_core_functions()
方法(尽管不推荐)使用“模拟所有”方法。
模拟WP常见类
\OTGS_TestCase
提供了一种快速获取WordPress中最常用的一些类的存根的便捷方法。
通过调用$this->stubs->wpdb()
,您将获得一个存根,可以将其作为您正在测试的类的依赖项传递。如果您需要控制该存根的行为,只需使用标准的PHPUnit模拟辅助工具即可。
示例1
$wpdb = $this->stubs->wpdb(); $wpdb->method( 'get_var' )->willReturn( 1 );
示例2
$results = array( array( 'translation_id' => 1, 'element_id' => 1, 'language_code' => 'en', 'source_language_code' => null, 'trid' => 1, 'element_type' => 'post_page' ), array( 'translation_id' => 2, 'element_id' => 2, 'language_code' => 'fr', 'source_language_code' => 'en', 'trid' => 1, 'element_type' => 'post_page' ), ); $wpdb = $this->this->wpdb(); $wpdb->expects( $this->exactly( 2 ) )->method( 'get_results' )->willReturn( $results );
您还可以获取的其他存根
- 使用
$this->stubs->WP_Widget()
获取WP_Widget
- 使用
$this->stubs->WP_Theme()
获取WP_Theme
- 使用
$this->stubs->WP_Filesystem_Direct()
获取WP_Filesystem_Direct
- 使用
$this->stubs->WP_Query()
获取WP_Query
重要的是要知道,如果您只需要定义类(例如,硬依赖项或子类),则不需要将存根分配给变量:只需调用该方法即可。
一个很好的例子是与WordPress的插件相关,其中您可能有自己的扩展WP_Widget
的插件。
在这种情况下,除非您想模拟一些WP_Widget
方法,否则只需调用$this->stubs->WP_Widget()
,然后编写您的测试。
扩展WP_Widget
的类将找到该类的定义,其中包含所有方法(执行无操作)。
资源和依赖项
以下是一些关于编写单元测试的资源,这些资源导致了该库的创建,以及包含在本库中的库的链接
- 从这里开始,对一般说明进行说明:http://wordpress.stackexchange.com/a/164138/7291
- 10up的WP_Mock:https://github.com/10up/wp_mock
- Mockery:https://github.com/padraic/mockery
- 函数模拟器:https://github.com/lucatume/function-mocker
- Factory Muffin:https://github.com/thephpleague/factory-muffin
- Factory Muffin Faker:https://github.com/thephpleague/factory-muffin-faker
- DomCrawler组件:https://symfony.com.cn/doc/current/components/dom_crawler.html
- CssSelector组件:https://symfony.com.cn/doc/current/components/css_selector.html
- php-loremipsum:https://github.com/joshtronic/php-loremipsum