Модульный тест Android Studio, выполняющий модульный тест, показывает «Пустой набор тестов»

#android #unit-testing #android-gradle-plugin

#Android #модульное тестирование #android-gradle-plugin

Вопрос:

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

Я использую Android Studio 0.6.1 с gradle 1.12

Вот моя структура папок:

Структура папок

MyActivityTest.java

 package com.vist.testableapp.tests;

import android.content.Intent;
import android.test.ActivityUnitTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.widget.Button;

import com.vist.testableapp.MyActivity;
import com.vist.testableapp.R;

public class MyActivityTest extends ActivityUnitTestCase<MyActivity>
{
    public MyActivityTest(Class<MyActivity> activityClass)
    {
        super(activityClass);
    }
    Button btn1;

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

        startActivity(new Intent(getInstrumentation().getTargetContext(), MyActivity.class), null, null);
        btn1 = (Button)getActivity().findViewById(R.id.button1);
    }

    @SmallTest
    public void testFirst()
    {
        assertEquals("Btn1",btn1.getText());
    }
}
 

build.gradle приложения

 apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "com.vist.testableapp"
        minSdkVersion 15
        targetSdkVersion 15
        versionCode 1
        versionName "1.0"
        testApplicationId "com.vist.testableapp.tests"

    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
 

Может ли кто-нибудь указать, что я делаю не так или чего мне не хватает?
Я искал в SO, но ни один из ответов мне не помог.

Ответ №1:

Конструктор должен выглядеть следующим образом:

 public MyActivityTest()
{
    super(MyActivity.class);
}
 

Мне нужно будет научиться не так сильно полагаться на шаблон кода IDE, который предоставил конструктору параметр.
Это было решено благодаря коллеге и http://siemprepreguntando.blogspot.de/2013/07/running-tests-test-running-startedtest.html

Ответ №2:

Недавно я также столкнулся с проблемой «пустой набор тестов». После проверки нескольких похожих вопросов и ответов и моей проблемы я могу сделать вывод, что проблема возникает из-за ошибки, препятствующей добавлению тестов в набор тестов, такой как ошибка статической инициализации.

Например, я использую популярный подход к добавлению всех тестов, как показано ниже, но это тот же сценарий с разными подходами к добавлению тестовых примеров в набор:

 public class FullTestSuite extends TestSuite {
public static Test suite() {
    return new TestSuiteBuilder(FullTestSuite.class)
            .includeAllPackagesUnderHere().build();
}

public FullTestSuite() {
    super();
}
}
 

И, по-видимому, в моем тестовом файле возникла проблема в статическом блоке {}, которая не позволила .includeAllPackagesUnderHere() успешно выполнить.

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

Ответ №3:

В моем случае сообщение «пустой набор тестов» было напрямую связано с целевым уровнем API эмулятора Android, который я запускал. Я настроил эмулятор с уровнем API 19 и использовал его при попытке запустить мои инструментальные тесты. Я также совсем недавно перенес свою кодовую базу для использования JUnit4 framework вместе с инструментарием AndroidJUnitRunner.

Я некоторое время бился головой о стену, прежде чем начал изучать проблемы с самим эмулятором. Конечно же, как только я настроил эмулятор с уровнем API 23, тесты начали работать нормально.

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

Я обновлю этот ответ, если узнаю больше.