子クラスでのスーパークラス メソッド呼び出しのモック
単体テストでは、サブクラス内のメソッド呼び出しをモックする必要がある場合がありますが、スーパークラスでは元の動作がそのまま残ります。このシナリオは、親クラスに委任するメソッドをテストするときに発生する可能性があります。
次の例を考えてみましょう:
<code class="java">class BaseService { public void save() {...} } public Childservice extends BaseService { public void save(){ //some code super.save(); } }</code>
この場合、テストでは super.save() の呼び出しのみをモックする必要があります。
これを実現する 1 つのアプローチは、Mockito が提供するスパイ機能を使用することです。 ChildService インスタンスをスパイすることで、BaseService インスタンスにアクセスでき、メソッド呼び出しをきめ細かく制御できるようになります。
<code class="java">class BaseService { public void validate(){ fail(" I must not be called"); } public void save(){ //Save method of super will still be called. validate(); } } class ChildService extends BaseService{ public void load(){} public void save(){ super.save(); load(); } } @Test public void testSave() { ChildService classToTest = Mockito.spy(new ChildService()); // Prevent/stub logic in super.save() Mockito.doNothing().when((BaseService)classToTest).validate(); // When classToTest.save(); // Then verify(classToTest).load(); }</code>
BaseService クラスの validate() メソッドをモックすることで、テストは次のことを保証します。 super.save() の元のロジックは実行されません。さらに、ChildService クラスのload() メソッドをスタブすると、それが期待どおりに呼び出されることを確認できます。このアプローチにより、メソッド呼び出しをきめ細かく制御でき、テスト中に特定の機能を分離できます。
以上が子クラスでスーパークラスのメソッド呼び出しを模擬するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。