私は、ライブラリモジュールが2つあり、foo-module
とbar-module
のAndroid Studioプロジェクトを持っています。それぞれは、foo-module
が戦略インタフェースを定義し、bar-module
がfoo-module
に依存し、そのような戦略を実装するライブラリを実装します。 foo-module
には、スタブ戦略の実装を使用してコアコードをテストするための計測テスト(foo-module/src/androidTest/
)があり、bar-module
には独自の計測テストが必要です。Androidライブラリモジュール間でテストクラスを継承するにはどうすればよいですか?
実際のテストのほとんどを行うfoo-module/src/androidTest/
にAbstractTests
クラスを定義しました。私はまた、foo-module/src/androidTest/
のStubTests
クラスを持っており、AbstractTests
を拡張し、テストケースを完了するために必要なメソッドを実装します(ストラテジの実装などを提供します)。これはすべて素晴らしいです。 bar-module/src/androidTest/
で
、私はStubTests
をミラーが、bar-module
に実装戦略を提供するように設計BarStrategyTests
クラスを作成しました。しかし、build.gradle
ファイルにcompile project(':foo-module')
があり、bar-module
のメイン(非テスト)クラスはfoo-module
のメイン(非テスト)クラスで正常に動作しますが、BarStrategyTests
はAbstractTests
を見ることができません。 IOWは、project()
依存関係が正規コードを処理していますが、androidTest/
コードを処理しません。私は "error:package com.commonsware.foo.test does not exist"というメッセージが表示されます。
androidTestCompile project(':foo-module')
も追加しましたが、同じ結果が出ました。
モジュール間で計装テストコードを共有するためのレシピは?
一時的に、私はAbstractTests
をクローンできますが、それは長期的な解決策ではありません。
This SO questionは、通常のJavaの場合と同じです。誰もがthe one answerのオプションを試して、Androidの計装テストで動作させるようにしましたか?最初のオプション(一般的なテストコードを通常の非テストコードとして別のモジュールに移動する)は妥当と思われますが、java
プラグインの代わりにcom.android.library
プラグインでうまく動作するかどうかはわかりません。
これを達成する方法を見つけましたか?テストクラスを他のモジュールでも利用できるようにしたいが、リソースを共有するのは難しい。 – karate
@karate:私は受け入れられた答えに概説されているアプローチを使用しています。 – CommonsWare