bigcommerce/mock-injector

自动模拟测试DI组件的注入器

9.0.0 2024-07-30 06:02 UTC

This package is auto-updated.

Last update: 2024-08-30 06:56:39 UTC


README

Build Status Scrutinizer Code Quality Code Coverage

自动模拟测试依赖注入组件

将使用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. 保留所有权利。

在此软件及其相关文档文件(“软件”)的副本中,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售副本的权利,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,除非另有说明,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定用途和不受侵犯的保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论这些索赔、损害或其他责任是由于合同、侵权或其他方式引起的,无论与软件或软件的使用或其他方式有关。