Android Studio运行单元测试显示“空测试套件”#39;

时间:2014-06-24 14:52:15

标签: android unit-testing android-gradle

我想开始为我的应用程序编写单元测试但是我无法运行一个简单的测试。 我创建了一个小应用程序,只是为了尝试如何设置和运行单元测试,但实际上没有测试,我得到'空测试套件'。

我正在使用带有gradle 1.12的Android Studio 0.6.1

这是我的文件夹结构:

Folder structure

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'])
}

有人能指出我做错了什么或我错过了什么? 我搜索过,但没有一个答案对我有帮助。

3 个答案:

答案 0 :(得分:6)

构造函数应如下所示:

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

我需要学习不要过分依赖IDE提供构造函数的IDE代码模板。 感谢一位同事和http://siemprepreguntando.blogspot.de/2013/07/running-tests-test-running-startedtest.html

解决了这个问题

答案 1 :(得分:2)

我也遇到了空的测试套件&#34;最近的问题。在检查了几个类似的问题和答案以及我的问题后,我可以得出结论,问题是由于错误导致测试被添加到测试套件中而导致的,例如静态初始化中的错误。

例如,我使用流行的方法添加所有测试,如下所示,但是使用不同方法向套件中添加测试用例的方法相同:

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

public FullTestSuite() {
    super();
}
}

显然我的测试文件在静态{}块中出现问题,阻止.includeAllPackagesUnderHere()成功运行。

所以我建议任何人面对这个错误,首先检查你的应用程序日志,看看你的测试是否遇到了阻止测试用例被添加到测试套件的问题(比如被调用的错误构造函数的类似示例或静态初始化问题)

答案 2 :(得分:2)

在我的情况下,&#34;空测试套件&#34;消息与我正在运行的Android模拟器的目标API级别直接相关。我已经设置了一个API级别为19的模拟器,并在尝试运行我的仪器测试时使用它。我最近也迁移了我的代码库,以使用JUnit4框架和AndroidJUnitRunner检测运行器。

在我开始研究实际模拟器的问题之前,我正撞在墙上一段时间。果然,只要我设置了一个API级别为23的仿真器,测试就开始运行了。

进一步的实验发现我的测试在API Level 22&amp; amp; 23个模拟器,但不在其下的任何东西上。我怀疑它与我的测试依赖关系和最低API级别要求有关。

如果我发现更多,我会更新此答案。