Android Studio运行单元测试显示';空测试套件';

Android Studio运行单元测试显示';空测试套件';,android,unit-testing,android-gradle-plugin,Android,Unit Testing,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.Activ

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

我正在使用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());
    }
}
有人能指出我做错了什么或我遗漏了什么吗?
我搜索了一下,但没有一个答案对我有帮助。

构造函数应该是这样的:

public MyActivityTest()
{
    super(MyActivity.class);
}
我需要学习不要太依赖IDE的代码模板,它为构造函数提供了参数。 多亏了一位同事,这个问题才得以解决。最近,我还遇到了“空测试套件”问题。在检查了一些类似的问题和答案以及我的问题之后,我可能会得出结论,问题是由于一个阻止将测试添加到测试套件的错误造成的,例如静态初始化中的错误

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

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

public FullTestSuite() {
    super();
}
}
显然,我的测试文件在静态{}块中出现问题,导致.includealPackageSunderHere()无法成功运行

因此,我建议任何面临此错误的人首先检查您的应用程序日志,看看您的测试是否遇到了阻止将测试用例添加到测试套件的问题(例如调用错误构造函数或静态初始化问题的类似示例)。

在我的例子中,是“空测试套件”该消息与我正在运行的Android仿真器的目标API级别直接相关。我已经设置了一个API级别为19的仿真器,并在尝试运行检测测试时使用了它。我最近还迁移了代码库以使用JUnit4框架和AndroidJUnitRunner工具运行程序

在我开始研究实际仿真器的问题之前,我已经把头撞在墙上好一阵子了。果不其然,当我设置了一个API级别为23的仿真器时,测试开始正常运行

进一步的实验发现,我的测试在API级别22和23的模拟器上运行良好,但在任何低于该级别的模拟器上都没有运行。我怀疑这与我的测试依赖性和最低API级别要求有关

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

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

public FullTestSuite() {
    super();
}
}