この問題を抱えているのは私だけではないことがわかりましたが、正しい答えは見つかりません。テストしたいAndroidプロジェクトがあります。プロジェクトのクラスごとにjunitテストクラスを作成します。テストを実行すると、次のエラーが発生します。
Java.lang.NoClassDefFoundError: Android/content/Context
これは私のクラステストです:
public class DevicesBDDTest extends TestCase {
DevicesBDD bdd;
/**
* @throws Java.lang.Exception
*/
protected static void setUpBeforeClass() throws Exception {
}
/**
* @throws Java.lang.Exception
*/
protected static void tearDownAfterClass() throws Exception {
}
protected void setUp() throws Exception {
super.setUp();
Context ctx = mock(Context.class);
final MaBaseSQLiteInterface mockMaBaseSQLite = mock(MaBaseSQLiteInterface.class);
bdd = new DevicesBDD(ctx){
@Override
public MaBaseSQLiteInterface createMaBaseSQlite(Context context) {
return mockMaBaseSQLite;
}
};
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void test() {
assertEquals(1, 1);
}
}
私のクラスDevicesBDDにはオブジェクトContextが必要なので、モックを作成します(mockitoを使用)。オブジェクトMockContextでも試しましたが、機能しません。
これは私のJavaビルドパス:
私があなたと同じ問題を抱えているかどうかはわかりませんが、gradleを使用しているため、何らかの理由でテストが実行されなくなり、同じエラーが発生します。私は掃除と再建を試みましたが、役に立ちませんでした。何時間もの欲求不満と答えを見つけようとした後、GitHubスレッドで簡単な解決策に出くわしました。
この問題は、プロジェクトで。gradleフォルダーを削除して、プロジェクトを再構築することで解決しました。
(vpetrovに感謝)
ターミナルで./gradlew clean test
を実行できます。
次の手順に従って問題を修正しました-
1.モジュールレベルのbuild.gradleファイルを開き、依存関係に移動し、この行に移動します-
testImplementation 'junit:junit:4.12'
2.junitのバージョンをその下のバージョンに変更します(4.10など)。
testImplementation 'junit:junit:4.10'
3.同期プロジェクト
4.私の場合、この時点で修正された問題
5.必要に応じて、junitバージョンを以前のバージョン(私の場合は4.12)に戻します。
testImplementation 'junit:junit:4.12'
6.同期プロジェクト
私の場合、junitバージョンの変更とプロジェクトの同期が機能しました。