bigcommerce / mock-injector
自动模拟测试DI组件的注入器
9.0.0
2024-07-30 06:02 UTC
Requires
- php: ^8.2
- bigcommerce/injector: ^4.1
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^11.0
Requires (Dev)
- phpstan/phpstan: ^1.10
README
自动模拟测试依赖注入组件
将使用BigCommerce注入器自动模拟对象的所有注入依赖。这允许对象重构以去除或添加依赖项,而无需重建所有模拟定义或修改许多测试,从而使解耦的DI驱动开发变得更加容易。
可以通过在测试中的TestInjector上调用getMock(CLASS_NAME)来配置模拟的预期。这将返回一个ObjectProphecy对象(由Prophecy生成的模拟,Prophecy是PHPUnit中包含的模拟库)。
每个完全限定的类名创建一个模拟实例,因此如果测试的对象接收两个相同类型的参数,相同的模拟将传递给两者(因此请确保设置适当的预期)。
构造使用
// All constructor dependencies resolved through mocking
$testObject = $testInjector->create(My\Test\Object::class);
// Parameter injection - will provide parameters either by type, name or position - otherwise resolve via mocking
$testObject = $testInjector->create(My\Test\Object::class, [
"enabled" => true, // Named
7 => "fish", // Positional
Logger::class => new Logger(), // Type
]);
调用使用
// Call the method 'createUser' on an existing object
$result = $testInjector->invoke($instanceOfThing, "createUser");
// Parameter injection - will provide parameters either by type, name or position - otherwise resolve via mocking
$result = $testInjector->invoke($instanceOfThing, "createUser", [
"enabled" => true, // Named
7 => "fish", // Positional
Logger::class => new Logger(), // Type
]);
有关与PHPUnit测试的集成,请参阅:AutoMockingTest.php
(MIT许可证) 版权所有 © 2015-2017 BigCommerce Inc. 保留所有权利。
在此软件及其相关文档文件(“软件”)的副本中,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售副本的权利,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,除非另有说明,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定用途和不受侵犯的保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论这些索赔、损害或其他责任是由于合同、侵权或其他方式引起的,无论与软件或软件的使用或其他方式有关。