2017-09-12 3 views
1

私は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) 

どのように問題を解決するか?

+0

https://github.com/nhaarman/mockito-kotlinを試してください。ここに例があります:https://github.com/jaredsburrows/android-gif-example。 –

+0

@JaredBurrows私も 'com.nhaarman:mockito-kotlin'を使って試してみましたが、同じエラーです。リンクしたサンプルレポには、異なるパッケージ名(データ、プレゼンテーション)を持つ単一のモジュールがありますが、私はclean-architetcture-javaの実装のように複数のモジュール(ドメイン、データ、プレゼンテーション)を持っています。 – blizzard

+0

モックオブジェクトを初期化しようとします。 @Beforeメソッドで最初に使用する:MockitoAnnotations.initMocks(this) –

答えて

0

は手動presentation/build.gradle

sourceSets { 
    main.java.srcDirs += 'src/main/java' 
    main.java.srcDirs += [file("$buildDir/generated/source/kapt/main")] 
    main.java.srcDirs += '../data/src/main/java' 
    main.java.srcDirs += '../entities/src/main/java' 
    main.java.srcDirs += '../domain/src/main/java' 
    } 

設定ですべてのモジュールのためのクラスパスを指定することで問題を解決しました(私はまた、モックメーカー-インラインを使用してみましたと思いますが、それは動作しません):のGradleバージョン3.0.0-beta6、Android Studio 3.0-Beta 6.

関連する問題