sitphp / doubles
一个简单而强大的库,用于为测试创建类 doubles
Requires
- php: >=7.2
- ext-dom: *
- ext-mbstring: *
- phpunit/phpunit: ~8.5
README
"sitphp/doubles" 库可以帮助您通过生成看起来像原始类但可以进行操作和测试的 doubles 来测试您的 PHP 类(有点像类的副本)。然后可以使用这些 doubles 代替原始类进行测试。此库可以创建任何类型的类、接口或 traits 的 doubles。
查看完整文档: 这里
要求
"sitphp/doubles" 库需要至少 PhpUnit 6.5 和至少 PHP 7.0。它应该通过 composer 安装,这将确保您的配置符合要求。
{.note .info} 注意:您可以从这里获取 composer: https://getcomposer.org.cn。
安装
将以下行添加到 composer.json 文件中的 "require-dev" 部分:"sitphp/doubles": "2.4.*"
{ "require-dev": { "sitphp/doubles": "2.4.*" } }
然后运行以下命令:
composer update
这将安装 "sitphp/doubles" 库的最新版本以及所需的 PhpUnit 包。
创建一个 double
当原始类的所有方法都被覆盖以返回 null
时,double 被称为 "dummy"。要获取 "dummy" double 实例,请使用 dummy
方法。
// Get a double instance of type "dummy" for class "MyClass" $my_double = Double::dummy(MyClass::class)->getInstance();
当原始类的所有方法都被覆盖以与原始类中的行为相同时,double 被称为 "mock"。要获取 "mock" double 实例,请使用 mock
方法。
// Get a double instance of type "mock" for class "MyClass" $my_double = Double::mock(MyClass::class)->getInstance();
更多详情: 阅读创建 doubles 的文档
测试一个 double
要测试 double 方法被调用的次数,请使用 count
方法。
// Test that the method "myMethod" is called a least one time $double::_method('myMethod')->count('>=1');
要测试传递给 double 方法的参数值,请使用 args
方法。
// Test that the arguments passed to method "myMethod" are "value1" and "value2" $double::_method('myMethod')->args(['value1', 'value2']);
要更改方法的返回值,请使用 stub
方法。
// Make method "myMethod" return "hello" $my_double::_method('myMethod')->return('hello');
更多详情: 阅读测试 doubles 的文档
配置
您可以使用 dummy
和 mock
方法的第二个参数来定义特定 double 的配置。
// Get double instance with config $my_double = Double::dummy(MyClass::class, [ 'allow_final_doubles' => true, 'allow_non_existent_classes' => true ])->getInstance();
以下是所有可用的配置参数列表:
allow_final_doubles
:将此参数设置为false
以阻止尝试创建最终类/方法的 doubles。allow_protected_methods
:将此参数设置为false
以禁止测试受保护的方法。allow_non_existent_classes
:将此参数设置为false
以禁止非存在类的别名 doubles。test_unexpected_methods
:将此参数设置为true
以在调用意外方法时自动接收断言错误。
更多详情: 阅读配置文档
关于
许可证
此库根据 MIT 许可证 许可。
作者
Alexandre Geiswiller - alexandre.geiswiller@gmail.com。