web-dev-qa-db-ja.com

java.lang.NoClassDefFoundError:Androidとjunitのテスト

この問題を抱えているのは私だけではないことがわかりましたが、正しい答えは見つかりません。テストしたい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ビルドパス:

  • mockito-all-1.9.5.jar
  • Android 2.1-> Android.jar
  • Androidの依存関係-> annotations.jar
  • JUnit 3-> junit.jar
33
helene

私があなたと同じ問題を抱えているかどうかはわかりませんが、gradleを使用しているため、何らかの理由でテストが実行されなくなり、同じエラーが発生します。私は掃除と再建を試みましたが、役に立ちませんでした。何時間もの欲求不満と答えを見つけようとした後、GitHubスレッドで簡単な解決策に出くわしました。

この問題は、プロジェクトで。gradleフォルダーを削除して、プロジェクトを再構築することで解決しました。

(vpetrovに感謝)

74
LoPoBo

ターミナルで./gradlew clean testを実行できます。

20
rcde0

次の手順に従って問題を修正しました-

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バージョンの変更とプロジェクトの同期が機能しました。

4
Mohit Atray