嘲讽 - 部分嘲讽
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使用部分模拟。
我无法理解 部分模拟 的用途。下面是一个非常简单的例子:
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使用部分模拟。