Probleme bei der teilweisen Verspottung in Laravel 9.x
P粉726234648
2023-09-02 23:28:57
<p>Hey Laravel-Entwickler, ich habe ein Problem mit teilweisem Mocking gefunden. Ich muss eine Methode testen, die eine interne Methode verwendet, die verspottet werden muss. Ich habe versucht, mehrere Methoden zu verwenden, um die Methode zu verspotten, wie die nächste Idee: < /p>
<pre class="brush:php;toolbar:false;">#1
$mockMyClass = Mockery::mock(
$myClassInstance
)->makePartial();
#2
$mockMyClass = $this->partialMock();
#3
$mockMyClass = $this->createPartialMock();
// und dann
$mockMyClass->shouldReceive('internalMethod')
->andReturn($responseInternalMethod);</pre>
<p>Und natürlich auf die in der Dokumentation Laravel Mocking Objects</p>
<pre class="brush:php;toolbar:false;">AppService verwenden;
verwenden Sie MockeryMockInterface;
$mock = $this->partialMock(Service::class, function (MockInterface $mock) {
$mock->shouldReceive('process')->once();
});</pre>
<p>Keine dieser Ideen funktioniert. $mockMyClass führt immer die echte Methode aus, nicht die Scheinmethode, die $responseInternalMethod zurückgeben sollte. Hat jemand dieses Problem auch? Ich muss bestätigen, ob es sich um ein Problem mit Laravel, Mockito oder extern handelt und nicht um die lokale Umgebung, haha. Ich lese dich! </p>
<p>Technische Details:
Laravel 9.x
PHP 8.1
PHP-Einheit 9.5
Verspottung 1,5</p>
好吧,我找到了解决方案,但无论如何,我有兴趣知道是否有人也遇到这个问题
我解决这个问题的方法是:
这些情况的解决方案是直接创建我的类的模拟实例,并将构造函数所需的所有参数作为依赖项或数据。然后使用模拟类作为真实类继续测试循环。