Isu menggunakan ejekan separa dalam Laravel 9.x
P粉726234648
P粉726234648 2023-09-02 23:28:57
0
1
529
<p>Hai pembangun laravel, saya menemui masalah dengan ejekan separa, saya perlu menguji kaedah yang menggunakan kaedah dalaman, yang perlu diejek, saya cuba menggunakan beberapa kaedah untuk mengejek kaedah, seperti idea seterusnya: < ; /p> <pre class="brush:php;toolbar:false;">#1 $mockMyClass = Olok-olok::olok-olok( $myClassInstance )->makePartial(); #2 $mockMyClass = $this->partialMock(); #3 $mockMyClass = $this->createPartialMock(); // dan kemudian $mockMyClass->shouldReceive('internalMethod') ->andReturn($responseInternalMethod);</pre> <p>Dan jelas sekali menggunakan cara yang diterangkan dalam dokumentasi Laravel Mocking Objects</p> <pre class="brush:php;toolbar:false;">gunakan AppService; gunakan MockeryMockInterface; $mock = $this->partialMock(Perkhidmatan::kelas, fungsi (MockInterface $mock) { $mock->harusTerima('proses')->sekali(); });</pre> <p>Tiada idea ini berfungsi, $mockMyClass sentiasa melaksanakan kaedah sebenar, bukan kaedah olok-olok yang sepatutnya mengembalikan $responseInternalMethod. Adakah sesiapa yang mengalami masalah ini juga? Saya perlu mengesahkan sama ada ia adalah isu dengan Laravel, Mockito, atau secara luaran, dan bukan persekitaran tempatan, haha. Saya membaca awak! </p> <p>Butiran teknikal: Laravel 9.x PHP 8.1 Unit PHP 9.5 Ejekan 1.5</p>
P粉726234648
P粉726234648

membalas semua(1)
P粉885035114

Baiklah, saya dah jumpa penyelesaiannya, tapi macam mana pun, saya berminat nak tahu ada sesiapa pun ada masalah ni

Penyelesaian saya untuk masalah ini ialah:

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);
}
Penyelesaian untuk kes ini adalah dengan terus membuat contoh olok-olok kelas saya dan lulus semua parameter yang diperlukan oleh pembina sebagai kebergantungan atau data. Kemudian teruskan gelung ujian menggunakan kelas olok-olok sebagai kelas sebenar.
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan