Ich habe ein Problem mit zu verstehen, was teilweise Mocks sind für verwendet werden. Ein sehr einfaches Beispiel unten:Spottware - teilweise 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('[email protected]');
$userEventHandler = new \App\UserEventHandler($mailer, $user);
$this->assertEquals(true, $userEventHandler->onUserRegister());
}
}
diesen Test besteht und eigentlich keine E-Mail senden (so ist es in Ordnung). Als ich diese Mock zu einer teilweisen Mock ändern, wie folgt aus:
$mailer = Mockery::mock('\App\Mailer')->makePartial();
Es geht auch, aber ich frage mich, warum und was ist der Unterschied?
Und es zum Beispiel in wechselnden:
$mailer = Mockery::mock('\App\Mailer[setEmail]');
tatsächlich sendet eine E-Mail.
Konnte mir jemand diese Unterschiede erklären (insbesondere Vergleich partielle Mocks zu normalen Standard-Mocks) und wann eine bestimmte Art von Mock zu verwenden.
Onkel Bob hat einen großen Job gemacht, den Unterschied zwischen allen möglichen Testdoppel zu erklären: https://8thlight.com/blog/uncle-bob/2014/05/14/TheLittleMocker.html – mingos