php-mock / php-mock-prophecy
使用 Prophecy 模拟内置 PHP 函数(例如 time())。此软件包依赖于 PHP 的命名空间回退策略。不需要额外的扩展。
0.1.2
2023-06-13 07:49 UTC
Requires
- php: >=7.2
- php-mock/php-mock-integration: ^2.2.1
- phpspec/prophecy: ^1.12.1
Requires (Dev)
- phpunit/phpunit: ^8.5.13 || ^9.5
- squizlabs/php_codesniffer: ^3.5
README
此软件包将功能模拟库 PHP-Mock 与 Prophecy 集成。
安装
使用 Composer
composer require --dev php-mock/php-mock-prophecy
用法
构建一个新的 PHPProphet
,然后使用 PHPProphet::prophesize()
为给定命名空间创建函数预言
namespace foo; use phpmock\prophecy\PHPProphet; $prophet = new PHPProphet(); $prophecy = $prophet->prophesize(__NAMESPACE__); $prophecy->time()->willReturn(123); $prophecy->reveal(); assert(123 == time()); $prophet->checkPredictions();
限制
此库具有与底层 php-mock
相同的限制。
-
只有命名空间上下文中的 非限定 函数调用可以被预言。例如,在命名空间
foo
中对time()
的调用是预言可用的,而对\time()
的调用则不是。 -
模拟必须在测试类中对非限定函数的第一次调用之前定义。这在 Bug #68541 中有记录。在大多数情况下,您可以忽略此限制。但如果您遇到此问题,可以在第一次调用之前调用
PHPProphet::define()
。这将定义一个无副作用的命名空间函数。 -
此外,它还受到 Prophecy 的限制:Prophecy 不支持按引用传递。如果您需要在预言中使用按引用传递,请考虑使用另一个框架(例如 php-mock-phpunit)。
许可证和作者
此项目是免费的,受 WTFPL 协议保护。此项目的负责人是 Markus Malkusch markus@malkusch.de。
捐赠
如果您喜欢这个项目并且愿意慷慨捐赠,请在此处捐赠一些比特币:1335STSwu9hST4vcMRppEPgENMHD2r1REK