Подтвердить что ты не робот

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, поэтому я создаю mock (с mockito). Я тоже пытался использовать объект MockContext, но он не работает.

Это мой путь сборки Java:

  • Mockito-все-1.9.5.jar
  • Android 2.1 → android.jar
  • Зависимости от Android → annotations.jar
  • Июнь 3 → junit.jar
4b9b3361

Ответ 1

Не уверен, что у меня была такая же проблема, как у вас, но я использую gradle, и по какой-то причине тесты просто не будут работать больше с той же ошибкой, что и у вас. Я пробовал очистить и перестроить, но безрезультатно. После нескольких часов разочарования и поиска ответа я встретил простое решение в потоке GitHub:

Я решил эту проблему удалить папку .gradle в моем проекте и перестроить проект.

(благодаря vpetrov)

Ответ 2

Вы можете запустить ./gradlew clean test в терминале.