Android Studio 为 AndroidTestCase 说“空测试套件”[重复]

Posted

技术标签:

【中文标题】Android Studio 为 AndroidTestCase 说“空测试套件”[重复]【英文标题】:Android studio says "Empty Test Suite" for AndroidTestCase [duplicate] 【发布时间】:2014-01-05 08:26:50 【问题描述】:

我创建了一个扩展 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);
    

【问题讨论】:

我在一个有 2 个模块的项目中遇到了类似的问题,但我找到的答案都没有帮助我。我在另一个问题上发布了我的解决方案。希望它可以帮助其他人:***.com/questions/14381694/… 【参考方案1】:

由于没有其他人提及它:AndroidTestCase 子类中的方法必须是 public 并且名称以“test”开头!

OP 和答案都正确,但我错过了它并得到了完全相同的错误。

【讨论】:

方法的名称必须以“test”开头,我知道了:) 是的 - 这让我明白了。不错的提示!【参考方案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)

【讨论】:

在哪里指定这是 Android 测试的强制文件结构? 这实际上不是强制性的,它只是默认的文件夹结构。您可以在 Android 工具网站上阅读更多相关信息:tools.android.com/tech-docs/new-build-system。当我写上面的答案时,我无法在默认结构之外进行测试,但是 Gradle Android 构建系统正在进行中,所以问题现在可能已经消失了。 根据上面 emidander 的链接,在构建系统中进行了重大更改,因此新的文件夹结构应该是:src/androidTest/java 这个 - 今天任何人遇到这个问题,可能是因为你升级了 gradle 并且你的文件夹仍然命名为 instrumentTest 而不是 androidTest【参考方案3】:

我知道这个问题很老了,自从提出这个问题以来,开发工具已经发生了很大变化。

但是,我遇到了类似的问题(在 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 编写了这个有点误导的“空测试套件”错误。

即“空测试套件”可能意味着它实际上说的是什么(您没有声明任何测试方法,例如因为您忘记用 @Test 注释它们),但它也可能意味着某些东西(例如在您的应用程序初始化代码)阻止测试运行程序到达任何测试方法(这似乎是你的情况)。

检查 adb-logcat 并搜索 RuntimeExceptions。这可能会为您找到问题的根本原因。

【讨论】:

【参考方案4】:

我收到此错误是因为我的一个测试方法在方法签名后没有包含“抛出异常”。可能会帮助某人

【讨论】:

这是我的错误来源。我实际上抛出了一些特定的异常,而不是通用的“异常”。为什么这是一个要求,因为我没有在文档中看到它。【参考方案5】:

我遇到了同样的问题。我的defaultConfig ... 中有testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 。我刚刚删除了该行,现在它工作正常(IDE 在构建时选择了正确的运行器配置)。

我希望这会对某人有所帮助。

【讨论】:

【参考方案6】:

我的问题是我有 android studio 生成的默认构造函数,看起来像这样

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

我不得不把它改成这个来解决这个问题

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

【讨论】:

根据定义,“默认构造函数”是没有参数的构造函数。【参考方案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,因为我们需要访问应用程序的资源。

【讨论】:

即使尝试了这个解决方案,同样的问题仍然会发生。从 AndroidTestCase 扩展是不够的。【参考方案8】:

本指南可能会有所帮助 - http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio

在最新的 gradle (0.9+) 上,测试应该在 androidTest 目录下

也在你的 gradle.build 中:

dependencies 
     androidTestCompile 'junit:junit:4.+'

同时添加 defaultConfig

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

【讨论】:

【参考方案9】:

您是否在 gradleConfig 中配置了 testRunner? 我们使用不同的 TestRunner 进行不同的测试(以加快速度。我的配置如下所示

android     
// Some stuff      
  defaultConfig 
        // Some other stuff

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

如果我禁用此行之一,相应的测试也会报告“空测试套件”。

【讨论】:

【参考方案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】:

我的测试用例中已经有一个默认构造函数,但它仍然给我错误“空测试套件”并卡在“实例化测试...”。

尝试创建新工作区、重置 Android Studio,但没有成功。

最后,关闭 Android SDK 和模拟器。

    转到您的 android-sdks/platform-tools。

    使用以下命令清除所有 Android 临时文件:

    一个。 rm -rf ~/Library/Application Support/AndroidStudio

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

    c。 rm -rf ~/Library/Application Support/AndroidStudio

    d。 rm -rf ~/Library/Preferences/AndroidStudio

    运行:

    ./adb kill-server
    ./adb start-server
    

    启动 Android 并运行测试用例。

【讨论】:

我想我尝试了这个问题的答案中提到的所有内容。我仍然得到输出:“运行测试测试运行开始完成空测试套件。”没有错误。我在***.com/questions/35426990/… 提出了一个问题

以上是关于Android Studio 为 AndroidTestCase 说“空测试套件”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

FLUTTER DOCTOR [X] Android 工具链

Android Studio为Android Studio设置HTTP代理

android studio 如何将git 得到最新的版本

Android lmkd 机制从R到T

如何设定android studio 版本

仅适用于 Android TV 的 Android 清单 - 支持的设备太少?