2017-04-03 12 views
1

ユニットテストで、アンドロイドがApplicationクラスを選択する方法に関するいくつかの奇妙な動作が発生しています。Androidのユニットテストで正しいアプリケーションクラスが使用されない

私はまた、私は、それぞれのユニットテストとエスプレッソ試験にsrc/testDevelopmentDebugandroidTestDevelopment間共有いくつかのテストコードを有するsrc/testDevelopmentDebug

ディレクトリにRobolectricユニットテストを持っています。共有コードはsrc/sharedTestにあり、私はこのような私のbuild.gradleファイルでこの設定を持っている:

sourceSets { 
    // Android Studio/the Android Studio Kotlin Plugin will stop recognizing these source folders as source 
    // folders without explicitly setting them 
    main.java.srcDirs += 'src/main/kotlin' 
    testDevelopmentDebug.java.srcDirs += 'src/testDevelopmentDebug/kotlin' 
    androidTestDevelopment.java.srcDirs += 'src/androidTestDevelopment/kotlin' 

    // Share code between UI and unit tests. 
    def sharedTestDir = 'src/sharedTest/kotlin' 
    androidTestDevelopment.java.srcDirs += sharedTestDir 
    testDevelopmentDebug.java.srcDirs += sharedTestDir 
} 

私の問題は、私は2つの間のApplicationクラスを共有しようとしているということですが、それは完全に機能していません。共有テストフォルダにSharedTestApplicationがあります。私はこのようなtestDevelopmentDebug/AndroidManifest.xmlファイルでそれを参照する場合でも、私が期待するよう

<application android:name="com.books.sharedtest.SharedTestApplication"/> 

エスプレッソテストはSharedTestApplicationを使用しています。

ユニットテストでは、デフォルトではsrc/mainApplicationクラスに戻り、その代わりに使用されます。今ここには奇妙な部分があります。私がSharedTestApplicationsrc/testDevelopmentDebugに拡張して何もしない場合。 (マニフェストを変更していなくても)それは私が望むようにSharedTestApplicationを使います。

理由は何ですか?あなたが@Configで別のマニフェストを指定しない限り

答えて

1

RobolectricはデフォルトAndroidManifest.xmlをロードしています。 @Configにアプリケーションクラスを指定することもできます。

詳細はtutorialをご確認ください。

+0

私の 'src/testDevelopmentDebug/AndroidManifest.xml'はビルド出力にまったく生成されていなかったので、' AndroidManifest.xml'を指定すると助けになりませんでした。それがあったとすれば、私はそれを固定することができたと確信しています。代わりに、私の問題を修正した '@Config(application = SharedTestApplication :: class)'を使用しました。また、私はすべてのテストクラスでその設定を複製しなければならないので、robolectric configを置くためのベーステストクラスを作成しました。 – CorayThan

+0

これは私が答えの中で修正するために提案した別のオプションです:)あなたはそれを解決しました! –

+1

母、超短い答えが、私はどうにかしてそれをすべて読んでいないのですか? – CorayThan

関連する問題