ホームページ >Java >&#&チュートリアル >Mockito を使用して Java で最終クラスをモックするにはどうすればよいですか?
Mockito を使用した最終クラスのモック
Java テストの領域では、依存関係を分離してテストするために非最終クラスをモックするのが一般的な方法です。制御された環境でコードを作成します。ただし、最終クラスは、モックに関して明確な課題を引き起こします。
たとえば、次の例を考えてみましょう。
public final class RainOnTrees { public void startRain() {} } public class Seasons { RainOnTrees rain = new RainOnTrees(); public void findSeasonAndRain() {rain.startRain();} }
このシナリオでは、RainOnTrees という名前の最終クラスがあり、それに依存するクラス Seasons。 Seasons を効果的にテストするには、RainOnTrees をモックする必要があります。ただし、Mockito バージョン 1 では、最終クラスのモックは本質的に不可能です。
Mockito Inline to the Rescue
この制限を克服するために、Mockito バージョン 2 では、mockito-inline が導入されました。コンストラクターを含む静的クラスと最終クラスのモックを可能にするパッケージ。この機能を利用するには、次の依存関係を Gradle ファイルに追加します。
testImplementation 'org.mockito:mockito-inline:2.13.0'
Mockito Inline によるモック
mockito-inline パッケージが追加されたら、final をモックします。クラスは簡単になります:
@ExtendWith(MockitoExtension.class) public class SeasonsTest { @Mock RainOnTrees rainMock; @BeforeEach public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void testFindSeasonAndRain() { Seasons seasons = new Seasons(); // Inject the mock into the Seasons class ReflectionTestUtils.setField(seasons, "rain", rainMock); seasons.findSeasonAndRain(); // Verify that the mocked method was called Mockito.verify(rainMock).startRain(); } }
Final注
最終クラスのモックは、最終クラスの実装が変更された場合に失敗する可能性のある脆弱なテストにつながる可能性があるため、慎重に使用する必要があることに注意することが重要です。可能であれば、依存関係注入用の非最終クラスを作成することは、テストの推奨アプローチです。
以上がMockito を使用して Java で最終クラスをモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。