Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon PowerMockの模擬メーカーは、Mockitoの模擬メーカーインラインとどのように異なりますか


PowerMockの模擬メーカーは、Mockitoの模擬メーカーインラインとどのように異なりますか


PowerMockとMockitoはどちらもJavaでのモッキングに使用されますが、特にそれぞれの「Mockmaker」実装を介してモッキングを処理する方法において、さまざまな目的を果たし、異なる機能を備えています。

PowerMockのモックメーカー

PowerMockは、より強力な機能を提供することにより、EasyMockやMockitoなどの他のモックライブラリを拡張します。カスタムクラスローダーとバイトコード操作を使用して、静的メソッド、コンストラクター、最終クラスと方法、プライベートメソッド、静的イニシャル化装置の除去を可能にします[4] [9]。 PowerMockの「Mockmaker」は、「PowerMockmaker」クラスによって実装されています。これは、必要に応じて別の「Mockmaker」に呼びかけます。これにより、PowerMockが正しく構成されていれば、競合なしに他のモッキングフレームワークと一緒に動作することができます[7]。

PowerMockのアプローチはより侵襲的であり、高度なモッキング機能を実現するためにバイトコード操作が必要です。これは、静的方法やプライベートメソッドをock笑するなど、モッキートだけでは不十分な複雑なシナリオに有益です[9]。

Mockito's Mock-Maker-Inline

Mockitoの「Mock-Maker-Inline」は、最終クラスと方法をock笑できるように導入された機能です。 PowerMockのようなバイトコード操作は必要ありませんが、代わりにJavaのインストルメントAPIを使用して、実行時にクラスを変更します。このアプローチは侵襲性が低く、カスタムクラスローダー[2] [8]は必要ありません。

「mock-maker-inline」を有効にするために、通常、 `src/test/resources/mockito-extensions`ディレクトリのコンテンツ「mock-maker-inline」を含む「org.mockito.plugins.mockmaker」という名前のファイルを追加します。または、 `mockito-inline`アーティファクトを使用することもできます。これにより、「mockmaker」拡張ファイル[2] [10]の手動構成が必要ないことでプロセスを簡素化できます。

Super Savings on Servers!

Ad

Mockito 5.0.0以降のバージョンは、デフォルトのモックメーカーとして「Mock-Maker-Inline」を使用しているため、追加の構成なしで最終クラスとメソッドを簡単に模倣しやすくなります[3] [10]。

###キーの違い

- 侵略性:Bytecode操作とカスタムクラスローダーの使用によりPowerMockはより侵襲的ですが、Mockitoの「Mock-Maker-Inline」はJavaインストゥルメンテーションを使用します。
- 機能:PowerMockは、静的メソッド、コンストラクター、プライベートメソッドをモックできます。これは、最終クラスやメソッド用の「Mockito-Inline」などの追加ツールなしではモッキートできません。
- 構成:PowerMockは、他の「Mockmaker」実装に委任するために特定の構成が必要ですが、Mockitoの「Mock-Maker-Inline」は、単純な構成ファイルで、または「Mockito-Inline」アーティファクトを使用して有効にできます。
- デフォルトの動作:Mockito 5以降では、「Mock-Maker-Inline」がデフォルトですが、PowerMockは常にその高度な機能を使用するために明示的なセットアップを必要とします。

要約すると、PowerMockとMockitoの「Mock-Maker-Inline」の両方がモッキング機能を強化しますが、それらはアプローチ、侵襲性、およびサポートするモッキングの種類が大きく異なります。 PowerMockはより強力ですが、より複雑ですが、Mockitoの「Mock-Maker-Inline」は、最終的なクラスと方法を模倣する簡単な方法を提供します。

引用:
[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[3] https://stackoverflow.com/questions/65986197/difference-between-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/3.2.4/org/mockito/plugins/inlinemockmaker.html
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.api.mockito.mockmaker.powermockmaker
[8] https://davidvlijmincx.com/posts/mockito_mock_final_methods_and_classes/
[9] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-dow-does-it-work-to-mock-final-methods