Laravel 9.x での部分モックの使用に関する問題
P粉726234648
2023-09-02 23:28:57
<p>laravel 開発者の皆さん、部分的なモックに問題が見つかりました。内部メソッドを使用するメソッドをテストする必要があり、これをモックする必要があります。次のアイデアのように、メソッドをモックするためにいくつかのメソッドを使用してみました。 /p>
<pre class="brush:php;toolbar:false;">#1
$mockMyClass = Mockery::mock(
$myClassInstance
)->makePartial();
#2
$mockMyClass = $this->partialMock();
#3
$mockMyClass = $this->createPartialMock();
// その後
$mockMyClass-> shouldReceive('internalMethod')
->andReturn($responseInternalMethod);</pre>
<p>そして明らかに、ドキュメント「Laravel オブジェクトのモック化」で説明されている方法を使用しています</p>
<pre class="brush:php;toolbar:false;">App\Service を使用します。
Mockery\MockInterface を使用します。
$mock = $this->partialMock(Service::class, function (MockInterface $mock) {
$mock-> shouldReceive('process')->once();
});</pre>
<p>これらのアイデアはどれも機能しません。$mockMyClass は、$responseInternalMethod を返すモック メソッドではなく、常に実際のメソッドを実行します。誰かもこの問題を抱えていますか?それがローカル環境ではなく、Laravel、Mockito、または外部の問題なのかを確認する必要があります(笑)。読みましたよ! </p>
<p>技術的な詳細:
Laravel 9.x
PHP8.1
PHP ユニット 9.5
挑発 1.5</p>
わかりました、解決策は見つかりましたが、とにかく、誰かがこの問題を抱えているかどうか知りたいです
この問題に対する私の解決策は次のとおりです:
リーリー このような場合の解決策は、クラスのモック インスタンスを直接作成し、コンストラクターに必要なすべてのパラメーターを依存関係またはデータとして渡すことです。次に、モック クラスを実際のクラスとして使用してテスト ループを続行します。