Phpunit 在测试中仅模拟一种方法 class - 使用 Mockery

Phpunit mock only one method in tested class - using Mockery

我这周开始学习 phpunit。我不知道如何从测试 class 中只模拟一种方法。 (这只是示例,所以我没有编写名称空间)。也许你能帮帮我

class SomeService
{
    public function firstMethod()
    {
        return 'smth';
    }
    public function secondMethd()
    {
        return $this->firstMethod() . ' plus some text example';
    }
}

并测试:

class SomeServiceUnitTest extends TestCase
{
    private $someService;

    public function setUp()
    {
        parent::setUp();
        $this->someService = new SomeService();
    }

    public function tearDown()
    {
        $this->someService = null;
        parent::tearDown();
    }

    public function test_secondMethod()
    {
        $mock = Mockery::mock('App\Services\SomeService');
        $mock->shouldReceive('firstMethod')->andReturn('rerg');
        exit($this->walletService->secondMethd());
    }
}

您可以使用 partial mocks 作为测试的示例 class,您可以这样做:

public function test_secondMethod()
{
    $mock = Mockery::mock('App\Services\SomeService')->makePartial();
    $mock->shouldReceive('firstMethod')->andReturn('rerg');
    $this->assertEquals('rerg plus some text example', $mock->secondMethd()); 
}

希望对您有所帮助