嘲讽 - 部分嘲讽

Mockery - partial mocks

我无法理解 部分模拟 的用途。下面是一个非常简单的例子:

UserEventTest.php

class UserEventTest extends PHPUnit_Framework_TestCase {

    public function tearDown()
    {
        Mockery::close();
    }

    /**
     * @test
     */
    public function user_register()
    {   
        $mailer = Mockery::mock('\App\Mailer');
        $mailer->shouldReceive('setEmail')
               ->shouldReceive('sendActivationMessage')
               ->andReturn(true);

        $user = Mockery::mock(\App\User::class);
        $user->shouldReceive('getEmail')
             ->andReturn('test@test.com');     

        $userEventHandler = new \App\UserEventHandler($mailer, $user);

        $this->assertEquals(true, $userEventHandler->onUserRegister());
    }

}

这个测试通过了,实际上并没有发送电子邮件(所以没关系)。当我将此模拟更改为部分模拟时,如下所示:

$mailer = Mockery::mock('\App\Mailer')->makePartial();

它也通过了,但我想知道为什么以及有什么区别?

例如,将其更改为:

$mailer = Mockery::mock('\App\Mailer[setEmail]');

实际发送了一封电子邮件。

任何人都可以向我解释这些差异(特别是将部分模拟与普通标准模拟进行比较)以及何时使用特定类型的模拟。

class ClassYouWantToTest {

  public function a();

  public function b();

}

如果您的方法 a() 使用方法 b() 并且您想模拟 b() 以仅测试 a(),那么您必须为您的 class.[=11= 使用部分模拟]

要恢复,如果您必须模拟其中一种方法,则仅对要测试的class使用部分模拟