Probleme bei der teilweisen Verspottung in Laravel 9.x
P粉726234648
P粉726234648 2023-09-02 23:28:57
0
1
517
<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>
P粉726234648
P粉726234648

Antworte allen(1)
P粉885035114

好吧,我找到了解决方案,但无论如何,我有兴趣知道是否有人也遇到这个问题

我解决这个问题的方法是:

public function testRealExternalMethod()
{
    // Create a mock of the dependency that will be used by the class
    $mockDependency = $this->createMock(Dependency::class);
    
    // in this case we need to use a partial mock because we have an internal method
    $mockMyClass = Mockery::mock(
        MyClass::class,
        [$mockDependency, $parameter1]
    )
        ->makePartial();

    $responseInternalMethod = ['needed data'];

    $mockMyClass->shouldReceive('internalMethod')
        ->andReturn($responseInternalMethod);

    $result = $mockMyClass->realExternalMethod($parameter2, $parameter3);
}
这些情况的解决方案是直接创建我的类的模拟实例,并将构造函数所需的所有参数作为依赖项或数据。然后使用模拟类作为真实类继续测试循环。
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!