Mockitoでfinal classをモックする
mockitoとは
mockitoはJavaのユニットテストでクラスをモック可能にするためのフレームワークです。
gradleを使っている場合は以下のように mockito-core
を依存に追加することで使用できます。
dependencies { testCompile "org.mockito:mockito-core:2.+" }
final classをモックする
mockitoは、デフォルトの状態では final
なクラスやメソッドをモックすることができなくなっています。
しかし、設定を追加することで final
なクラスやメソッドがモック可能になります。今回はその方法を2つ紹介します。
設定ファイルを追加する方法
1つ目はmockitoのドキュメントに書いてある方法で、以下の値を書いた /mockito-extensions/org.mockito.plugins.MockMaker
ファイルを追加するというものです。
Mockito - mockito-core 3.4.6 javadoc
mock-maker-inline
テストコードが test
ディレクトリに配置されている場合は test/resources/mockito-extensions/org.mockito.plugins.MockMaker
に追加すると良いでしょう。
mockito-inline ライブラリを追加する方法
2つ目は mockito-inline
ライブラリを追加する方法です。
dependencies{ testCompile "org.mockito:mockito-inline:2.+" }
このライブラリで行っていることは1つ目の方法とほぼ同じで、クラスパスに /mockito-extensions/org.mockito.plugins.MockMaker
を追加します。
ライブラリのソースは https://github.com/mockito/mockito/tree/release/2.x/subprojects/inline に上がっており、テストコードやgradleファイルを除けば
main/resources/mockito-extensions/org.mockito.plugins.MockMaker
のファイルが1つあるだけとなっています。
最後に
final
なクラスやメソッドをモックする必要がある場合には、設定ファイルを追加する必要があります。今回、2つの方法を紹介しましたがどちらも同じことを行っているためお好きな方法を選ぶと良いでしょう。
注意点として、ドキュメントにあるように一部のメソッドは上記の方法ではモックすることができません。
Some methods cannot be mocked
Package-visible methods of java.*
native methods