我在理解部分嘲笑的用途时遇到了问题。下面是一个非常简单的例子:
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]');
实际发送电子邮件。
有没有人能解释我这些差异(特别是比较部分模拟与普通标准模拟)以及何时使用特定类型的模拟。
答案 0 :(得分:1)
class ClassYouWantToTest {
public function a();
public function b();
}
如果你的方法a()使用方法b()并且你想模拟b()只测试a(),那么你必须为你的类使用部分模拟。
要继续,如果您必须模拟其中一种方法,则仅对要测试的课程使用部分模拟 。