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

Android-студия говорит "Empty Test Suite" для AndroidTestCase

Я создал примерный тестовый пример, который расширяет AndroidTestCase. Когда я запускаю тестовый пример, он ошибается, говоря

Running tests
Test running startedTest running failed: 
Instrumentation run failed due to 'java.lang.RuntimeException'
Empty test suite.

Тест-сценарий

import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;

import static org.junit.Assert.assertEquals;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import java.lang.Exception;
import java.lang.Override;

public class DateFormatTest extends AndroidTestCase{

    @Override
    protected void setUp() throws Exception {
        super.setUp();
    }

    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public DateFormatTest(){
        super(DateFormatTest.class);
    }


    @SmallTest
    public void testMultiply() {

        assertEquals("10 x 5 must be 50", 50, 10*5);
    }
}
4b9b3361

Ответ 1

Поскольку никто не упоминает об этом: методы в подклассах AndroidTestCase должны быть public и иметь имена, начинающиеся с "test"!

OP и ответы все получили это право, но я пропустил его и получил ту же ошибку.

Ответ 2

Я получил эту ошибку при запуске тестов из Android Studio. Оказалось, что я поставил свои тестовые примеры в неправильную папку. При запуске Gradle/Android Studio все тесты для Android должны находиться в папке src/instrumentTest/java.

Изменить: В версии Gradle версии 0.9 или более поздней версии правильное имя папки androidTest. (http://tools.android.com/tech-docs/new-build-system/migrating_to_09)

Ответ 3

Я получил эту ошибку, потому что один из моих методов тестирования не включил "исключение исключений" после сигнатуры метода. может помочь кому-то

Ответ 4

Я понимаю, что этот вопрос устарел, и инструменты разработки значительно изменились, поскольку этот вопрос задан.

Однако у меня была аналогичная проблема (в AndroidStudio 2.1.1), и оказалось, что это было просто сообщение об ошибке, которое вводило в заблуждение. Для меня он сказал:

Test running started
Test running failed: Instrumentation run failed due to 'java.lang.IllegalStateException'
Empty test suite.

(Примечание: разница в исходном вопросе заключается в IllegalStateException и RuntimeException)

Оказалось, что этот IllegalStateException был фактически запущен в инициализацию контекста приложения, как видно из проверки вывода logcat. В результате не было запущено никаких тестовых методов, и Android Studio записывает эту несколько ошибочную ошибку "Empty test suite".

т.е. "Пустой набор тестов" может означать то, что он на самом деле говорит (у вас нет объявленных методов тестирования, например, потому что вы забыли аннотировать их с помощью @Test), но это также может означать что-то (например, исключение из среды выполнения, код инициализации приложения) препятствует тому, чтобы тестирующее лицо получало какие-либо методы тестирования (что кажется вашим делом).

Проверьте adb-logcat и выполните поиск RuntimeException s. Вероятно, это может стать причиной вашей проблемы.

Ответ 5

Моя проблема в том, что у меня был конструктор по умолчанию, созданный студией Android, выглядел так:

public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
    public SomeTest(Class<NewsActivity> activityClass) {
        super(activityClass);
    }
}

и мне пришлось изменить его на это, чтобы избавиться от проблемы

public class SomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
        public SomeTest() {
            super(ActivityYouWantToTest.class);
        }
    }

Ответ 6

У меня такая же проблема. У меня testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" у меня defaultConfig {...}. Я только что удалил эту строку, и теперь она работает нормально (IDE выбирает конфигурацию правого бегуна на время сборки).

Надеюсь, это поможет кому-то.

Ответ 7

Мы используем класс AndroidTestCase для определения того, что мы тестируем компоненты, специфичные для Android. Основное преимущество AndroidTestCase заключается в том, что он дает нам доступ к ресурсам приложения, таким как строки и макеты, и т.д.

AndroidTestCase не требует перезаписывать конструктор по умолчанию, поскольку он не предоставляет конкретный Activity как Context, а скорее предоставляет вам общий, поэтому вы все равно можете вызвать getContext().

В вашем примере вы не используете какие-либо компоненты Android, поэтому для вас будет смысл:

import android.test.suitebuilder.annotation.SmallTest;

import junit.framework.TestCase;

public class DateFormatTest2 extends TestCase {

    @SmallTest
    public void testMultiply() {

        assertEquals("10 x 5 must be 50", 50, 10 * 5);
    }
}

Обратите внимание на использование TestCase, а не AndroidTestCase.

При использовании AndroidTestCase необходим тест, требующий ресурсов:

import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;

public class DateFormatTest extends AndroidTestCase {

    @SmallTest
    public void testAppTitle() {
        assertEquals("MyApp", getContext().getResources().getString(R.string.app_name));
    }
}

Здесь мы используем AndroidTestCase, потому что нам нужно получить доступ к ресурсам приложения.

Ответ 8

Это руководство может помочь - http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio

В последнем gradle (0.9+) тест должен находиться под androidTest dir

Также в вашем gradle.build:

dependencies {
     androidTestCompile 'junit:junit:4.+'
}

также добавьте те из defaultConfig {

testPackageName "test.java.foo"
testInstrumentationRunner "android.test.InstrumentationTestRunner"

}

Ответ 9

Вы настроили свой testRunner в своем gradleConfig? Мы используем разные TestRunners для разных тестов (чтобы ускорить процесс). Моя конфигурация выглядит как

android {    
// Some stuff      
  defaultConfig {
        // Some other stuff

        //junit test
        testInstrumentationRunner "de.qabel.qabelbox.QblJUnitRunner"
        //ui tests
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"   
    }  
}

Если я отключу одну из этих строк, соответствующий тест также сообщит "Empty Test Suite".

Ответ 10

Я только начал изучать тестирование приложений для Android, и я боролся с той же проблемой. Вам необходимо предоставить конструктор по умолчанию для вашего тестового класса, например:

package nilzor.myapp.tests;

public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
    public NilzorSomeTest(){
        super(ActivityYouWantToTest.class);
    }

    @SmallTest
    public void testBlah(){
        assertEquals(1,1);
    }
}

Ответ 11

У меня уже есть конструктор по умолчанию в моем тестовом примере, но он все же давал мне ошибку "Empty test suite" и застрял в "Тесте активации...".

Попробовал создать новое рабочее пространство, сбросив Android Studio, но это не сработало.

Наконец, закройте Android SDK и эмулятор.

  • Перейдите к своим инструментам android-sdks/platform.

  • Очистите все файлы temp для Android с помощью следующих команд:

    а. rm -rf ~/Library/Application Support/AndroidStudio

    б. rm -rf ~/Library/Caches/AndroidStudio

    с. rm -rf ~/Library/Application Support/AndroidStudio

    д. rm -rf ~/Library/Preferences/AndroidStudio

  • Run:

    ./adb kill-server
    ./adb start-server
    
  • Запустите Android и запустите тестовый пример.