davesweb/mockery-helper

一组辅助工具,用于创建使用Mockery库的有用单元测试

1.1.1 2018-02-17 00:04 UTC

This package is auto-updated.

Last update: 2024-09-13 00:42:42 UTC


README

这是一个库,可以帮助你以最佳方式使用Mockery

Build Status Latest Stable Version Latest Unstable Version License composer.lock

当前稳定版本:1.1.0

安装

通过composer

composer require davesweb/mockery-helper

如果你只需要在开发模式下测试依赖项,请使用--dev选项。

通过composer.json文件

你还可以直接将此包添加到你的composer.json文件中。将以下行添加到你的require块或require-dev块中

"davesweb/mockery-helper": "^1.1"

然后运行

composer update davesweb/mockery-helper

用法

安装完此包后,您可以在测试中使用提供的特性

<?php

namespace My\Tests;

use Davesweb\MockeryHelper\UsesMockery;
use PHPUnit\Framework\TestCase;

class UsesMockeryTest extends TestCase
{
    use UsesMockery;
}

此特性确保您的Mockery期望得到强制执行,因为它扩展了Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration特性。因此,如果您使用此特性,则不再需要调用\Mockery::close()

方法

此特性提供了以下方法。

方法

签名

public function method(callable $callable): string

如果您需要将方法名传递给Mockery期望,请使用此方法。此方法接受一个可调用对象作为其参数,确保您想要传递的方法名被IDE识别为方法名。这样,当您重构代码时,方法名也会在单元测试中重构。

此方法还会检查方法是否实际存在,因此您不会在方法名中犯任何错误。

可调用对象可以以下形式传递:'ClassName::method'[ClassName::class, 'method'][$object, 'method']

方法方法返回方法名。

示例用法

<?php

namespace My\Tests;

use Davesweb\MockeryHelper\UsesMockery;
use PHPUnit\Framework\TestCase;
use Some\Package\MyDependency;

class UsesMockeryTest extends TestCase
{
    use UsesMockery;
    
    public function setUp()
    {
        $mockedDependency = \Mockery::mock(MyDependency::class);
        
        $mockedDependency
            ->shouldReceive($this->method([MyDependency::class, 'methodItShouldReceive']))
            ->with('param 1', 'param 2')
            ->once()
            ->andReturn('My return value');
        
        //...
    }
}

mock

签名

public function mock(...$args): MockInterface

这是Mockery::mock(...$args): MockerInterface调用的别名。请参阅Mockery文档了解如何使用此方法。

spy

签名

public function spy(...$args): MockInterface

这是Mockery::spy(...$args): MockerInterface调用的别名。请参阅Mockery文档了解如何使用此方法。

namedMock

签名

public function namedMock(...$args): MockInterface

这是Mockery::namedMock(...$args): MockerInterface调用的别名。请参阅Mockery文档了解如何使用此方法。

跳过方法存在性检查。

有时您可能需要能够跳过检查方法是否实际定义在类上,同时仍然保持重构选项。例如,如果您使用魔法方法__call()来处理某些方法调用。

在这种情况下,您可以通过覆盖allowNonExistingMethods属性或在其测试中设置它来禁用检查。

class UsesMockeryTest extends TestCase
{
    use UsesMockery;
    
    /**
     * {@inheritdoc}
     */
    protected $allowNonExistingMethods = true;
    
    public function test_something()
    {
        // This entire test case won't check if methods exist.
    }
}
class UsesMockeryTest extends TestCase
{
    use UsesMockery;
    
    public function test_something()
    {
        $this->allowNonExistingMethods = true;
        
        // Only this test won't check if methods exist.
    }
}

您还可以通过向method调用添加第二个参数来按方法调用设置检查。将其设置为true以强制执行检查,即使全局设置是要跳过检查。或将它设置为false以仅对该方法调用跳过检查。

class UsesMockeryTest extends TestCase
{
    use UsesMockery;
    
    public function test_something()
    {        
        $method = $this->method([MyDependency::class, 'someNonExistingMethod'], false);
        
        // Only the above call skips the check if the method exists
    }
}

贡献

感谢您花时间改进此包!如果您想为此包做出贡献,请首先阅读以下文件:贡献