ユニットテストで、アンドロイドがApplication
クラスを選択する方法に関するいくつかの奇妙な動作が発生しています。Androidのユニットテストで正しいアプリケーションクラスが使用されない
私はまた、私は、それぞれのユニットテストとエスプレッソ試験にsrc/testDevelopmentDebug
とandroidTestDevelopment
間共有いくつかのテストコードを有する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/main
Application
クラスに戻り、その代わりに使用されます。今ここには奇妙な部分があります。私がSharedTestApplication
をsrc/testDevelopmentDebug
に拡張して何もしない場合。 (マニフェストを変更していなくても)それは私が望むようにSharedTestApplication
を使います。
理由は何ですか?あなたが@Config
で別のマニフェストを指定しない限り
私の 'src/testDevelopmentDebug/AndroidManifest.xml'はビルド出力にまったく生成されていなかったので、' AndroidManifest.xml'を指定すると助けになりませんでした。それがあったとすれば、私はそれを固定することができたと確信しています。代わりに、私の問題を修正した '@Config(application = SharedTestApplication :: class)'を使用しました。また、私はすべてのテストクラスでその設定を複製しなければならないので、robolectric configを置くためのベーステストクラスを作成しました。 – CorayThan
これは私が答えの中で修正するために提案した別のオプションです:)あなたはそれを解決しました! –
母、超短い答えが、私はどうにかしてそれをすべて読んでいないのですか? – CorayThan