繁体   English   中英

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

[英]Android Studio running unit test shows 'Empty test suite'

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

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

这是我的文件夹结构:

文件夹结构

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

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

构造函数应如下所示:

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

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

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

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

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

public FullTestSuite() {
    super();
}
}

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

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

就我而言,“空测试套件”消息与我运行的Android模拟器的目标API级别直接相关。 我已经设置了一个API级别为19的模拟器,并在尝试运行我的仪器测试时使用它。 我最近也迁移了我的代码库,以使用JUnit4框架和AndroidJUnitRunner instrumentation runner。

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

进一步的实验发现我的测试在API Level 22和23模拟器上运行良好,但在下面没有任何东西。 我怀疑它与我的测试依赖关系和最低API级别要求有关。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM