私はCleanArchitecture-Androidスタイルに基づいてKotlinで書かれたサンプルアプリケーションを持っています。Kotlin + Mockito2:プレゼンターテストのClassNotFoundException
プレゼンテーション/ build.gradle
dependencies {
implementation project(':domain')
def presentationDependencies = rootProject.ext.presentationDependencies
def commonDependencies = rootProject.ext.commonDependencies
testCompile testingDependencies.junit
testCompile testingDependencies.mockito // org.mockito:mockito-inline:2.10.0
}
プレゼンテーション/ SRC /テスト/ javaの/パッケージ/
internal class RepoPreferencesPresenterTest : UnitTest() {
// FIXME: Mocking fails
@Mock private lateinit var mockRepositoriesUseCase: RepositoriesUseCase
@Mock private lateinit var mockView: RepoPreferencesContract.View
private lateinit var presenter: RepoPreferencesPresenter<RepoPreferencesContract.View>
@Before
fun setUp() {
presenter = RepoPreferencesPresenter(mockRepositoriesUseCase)
presenter.onAttach(mockView)
}
}
IをRepoPreferencesPresenterTest.kt:以下は、アプリの設定がありますテストケースを実行しようとすると、毎回ClassNotFoundException
に直面します。プレゼンターテストのために、ドメインモジュールにあるUseCaseを偽装することができません。そのアプリケーション以外は正常に動作しています。
java.lang.NoClassDefFoundError: Lcom/sample/domain/usecases/RepositoriesUseCase;
......
Caused by: java.lang.ClassNotFoundException: com.sample.domain.usecases.RepositoriesUseCase
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
どのように問題を解決するか?
https://github.com/nhaarman/mockito-kotlinを試してください。ここに例があります:https://github.com/jaredsburrows/android-gif-example。 –
@JaredBurrows私も 'com.nhaarman:mockito-kotlin'を使って試してみましたが、同じエラーです。リンクしたサンプルレポには、異なるパッケージ名(データ、プレゼンテーション)を持つ単一のモジュールがありますが、私はclean-architetcture-javaの実装のように複数のモジュール(ドメイン、データ、プレゼンテーション)を持っています。 – blizzard
モックオブジェクトを初期化しようとします。 @Beforeメソッドで最初に使用する:MockitoAnnotations.initMocks(this) –