loophp/mock-soapclient

一个假想的、可预测的SOAP客户端,非常适合用于单元测试。

1.2.2 2022-04-20 12:43 UTC

README

Latest Stable Version GitHub stars Total Downloads GitHub Workflow Status Scrutinizer code quality Type Coverage Code Coverage License Donate!

Mock SOAP客户端

一个假想的、可预测的SOAP客户端 ;-)

这个库允许您配置SOAP客户端及其返回的响应。

不发送任何真实的SOAP请求,这个库的唯一目的是用于测试。

安装

composer require loophp/mock-soapclient --dev

用法

使用响应数组

<?php

include __DIR__ . '/vendor/autoload.php';

use loophp\MockSoapClient\MockSoapClient;

$responses = ['a', 'b', 'c'];

$client = new MockSoapClient($responses);

$client->foo();  // a
$client->bar();  // b
$client->w00t(); // c
$client->foobar(); // a
$client->barfoo(); // b
$client->plop();   // c

或使用闭包

<?php

include __DIR__ . '/vendor/autoload.php';

use loophp\MockSoapClient\MockSoapClient;

$responses = static function ($method, $arguments) {
    return $method;
};

$client = new MockSoapClient($responses);

$client->foo();  // foo
$client->bar();  // bar
$client->w00t(); // w00t
$client->foobar(); // foobar
$client->barfoo(); // barfoo
$client->plop();   // plop
<?php

declare(strict_types=1);

include __DIR__ . '/vendor/autoload.php';

use loophp\MockSoapClient\MockSoapClient;

$responses = static function ($method, $arguments) {
    switch ($method) {
        case 'foo':
            return 'foo_method';
        case 'bar':
            return 'bar_method';
    }

    throw new SoapFault('Server', sprintf('Unknown SOAP method "%s"', $method));
};

$client = new MockSoapClient($responses);

$client->foo();                  // foo_method
$client->__soapCall('foo', []);  // foo_method
$client->bar();                  // bar_method
$client->__soapCall('bar', []);  // bar_method
$client->w00t();                 // Throws exception SoapFault.
$client->__soapCall('w00t', []); // Throws exception SoapFault.

或使用多个闭包

<?php

include __DIR__ . '/vendor/autoload.php';

use loophp\MockSoapClient\MockSoapClient;

$responses = [
    static function (string $method, array $arguments) {
        return '00' . $method;
    },
    static function (string $method, array $arguments) {
        return '11' . $method;
    },
    static function (string $method, array $arguments) {
        throw new SoapFault('Server', 'Server');
    },
];

$client = new MockSoapClient($responses);

$client->foo();  // 00foo
$client->bar();  // 11bar
$client->w00t(); // SoapFault exception.

高级响应工厂

<?php

declare(strict_types=1);

include __DIR__ . '/vendor/autoload.php';

use loophp\MockSoapClient\MockSoapClient;

$responses = [
    'a',
    'b',
    'c',
    'a' => 'aaa',
    'b' => [
        'bbb1',
        'bbb2',
    ],
    'c' => [
        static function ($method, $arguments) {
            return 'ccc1';
        },
        static function ($method, $arguments) {
            return 'ccc2';
        },
    ],
];

$client = new MockSoapClient($responses);

$client->foo(); // a
$client->foo(); // b
$client->foo(); // c
$client->foo(); // a
$client->a(); // aaa
$client->a(); // aaa
$client->b(); // bbb1
$client->b(); // bbb2
$client->b(); // bbb1
$client->c(); // ccc1
$client->c(); // ccc2
$client->c(); // ccc1

代码质量、测试和基准

每次将更改引入到库中时,Github都会运行测试和基准测试。

该库使用PHPSpec编写了测试。您可以在spec目录中自由查看它们。运行composer phpspec以触发测试。

在每次提交之前,使用GrumPHP执行一些检查,运行./vendor/bin/grumphp run以手动检查。

PHPInfection用于确保您的代码得到了适当的测试,运行composer infection来测试您的代码。

贡献

欢迎通过发送拉取请求来贡献。我们通常是一个非常响应的团队,我们将从始至终帮助您完成拉取请求。

由于某些原因,如果您不能为代码做出贡献,但愿意帮助,赞助是一个好、合理且安全的方式,以向我们表达对我们在这个包上投入时间的感激之情。

在[GitHub][github sponsors]上赞助我,以及贡献者中的任何一个。

变更日志

请参阅CHANGELOG.md以获取基于git提交的变更日志。

有关更详细的变更日志,请检查发布变更日志