【问题标题】:TestCase class not found by Android StudioAndroid Studio 未找到 TestCase 类
【发布时间】:2014-03-07 04:22:22
【问题描述】:

我编写了一个简单的测试用例类,并将其放在 Android Studio 的默认测试目录中:“src/androidTest”。我创建了一个 Android 测试构建配置,用于查找模块中的所有测试。当我运行构建配置时,我的测试没有执行,并且我在 logcat 中收到以下消息:W/TestGrouping﹕ Invalid Package: '' could not be found or has no tests。如果我指定测试包甚至特定的测试类,我会收到类似的类未找到消息。

我的测试类如下:

public class FirstTest extends InstrumentationTestCase {

public void testSample() {
        final int expected = 1;
        final int reality = 5;
        assertEquals(expected, reality);
    }
}

我的 build.gradle 文件如下所示:

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:gridlayout-v7:19.0.1'
    compile 'com.android.support:support-v4:19.0.1'
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

我正在运行 0.9 版的 android gradle 插件。我的顶级 build.gradle(app 目录的对等)如下所示。

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

我的项目目录结构如下:

app src androidTest java main java res

【问题讨论】:

  • 包含您的项目目录结构以供测试。

标签: android android-studio automated-tests


【解决方案1】:

您需要检查“运行”配置。

如果您要从 androidTest 文件夹运行测试,您应该选择 Android Instrumented Test 下的配置,而不是 junit。

运行(顶部工具窗口)/编辑配置...

【讨论】:

  • 您可以右键单击测试类文件并选择具有 Android Instrumented Test 图标的“Create 'ClassName'...”选项。
【解决方案2】:

androidTest/java 目录下的包结构需要与main/java 目录下的结构完全平行。

我上面的问题是main下的包结构是com.mydomain.myapp.subpackage,androidTest下的目录结构是com.mydomain.myapp.subpackage.somethingelse

一旦包结构匹配,测试就会被发现并完美执行。

【讨论】:

  • 有趣。我不会有这个要求。您应该能够将代码放在“com.mydomain.myapp.subpackage”中并在“com.mydomain.myapp.subpackage.test”中进行测试,但如果这样做,您需要了解受保护/包范围。
  • 我也不会这么认为。我还没有在任何地方看到它的文档,它可能只是 Android Studio 的 Canary 版本中的一个错误。不过,目录结构是我在它开始工作时所做的唯一更改。
  • 另外,请确保测试类与您正在测试的类具有完全相同的名称,+“测试”。包括大写。
  • 在我明白真相之前很痛苦,谢谢!
【解决方案3】:

您不需要真正重建 src 目录的结构来创建适当的测试。

被测试和测试类应该在同一个包中。

但是对于文件夹,它们应该是分开的。因此,对于测试和正常来源,我们使用不同的根。

问题是,如何设置这些根。在 AS 1.5 中(也许早期版本也可以),可以轻松完成:

  1. 制作几乎任何目录结构。其中某处有测试源的根目录。右键单击它并 Mark Directory As ...Sources Root
  2. 为测试创建另一个任意结构的目录。其中某处是测试源的根目录。右键单击它并 Mark Directory As ...Test Sources Root

在这些根目录下,测试类的路径必须与测试类从根目录的路径相同,因为这些路径上的目录名称定义了包,并且它们应该相同 em>。但是您不必担心根部上方的结构。

使用此方法,您可以将测试添加到任何现有的源结构。如果您自己创建结构,请使其相当传统。

编辑。请注意,Java 9 模块的文件夹结构是完全不同的。

【讨论】:

  • 我永远不会发现这一点,我是从 STS 来到 intellij 的,并且习惯于约定优于配置。谢谢
  • 忘记约定 :-) 现在我在玩 Java9 模块化系统,那里的文件夹结构绝对特别和不同。
【解决方案4】:

也许我可以为某人节省时间: 当我在 Android Studio 中选择了“发布”buildVariant 时,我遇到了同样的错误“找不到类:”,因此在运行 AndroidTests(Espresso) 之前,请仔细检查您的构建变体并尝试将其设置为“调试”

【讨论】:

  • 这是一个很好的指针,因为我没有运行它也没有调试它
  • 解决了我的问题,谢谢!
【解决方案5】:

请发布您的整个 build.gradle 文件。
您使用的是哪个版本的“com.android.tools.build:gradle”?
在 0.8 中,默认的测试路径是“instrumentTest/java/...”。
在 0.9 中,默认测试路径更改为“androidTest/java/...”。

要使用 androidTest,您应该:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

【讨论】:

  • 是的,好主意,此信息位于顶层 build.gradle 中,如我上面的编辑中所述。还是没有骰子。
【解决方案6】:

除了在我的笔记之前写的所有内容(所以请在我的这个建议之前检查那些),我有时解决了将测试文件移到自定义目录之外的问题(例如,我创建了像 db_test 或类似于 /test 或 androidTest) 到 test 或 androidTest 的根目录,将其拖放到 AndroidStudio 资源管理器中的 dir 外部并等待重构 android studio 对话框以进行移动确认。

运行成功后,我又放到原目录下,再次运行,就可以了。

在另一种情况下,我已经解决了重命名自定义目录的问题。

另外,因为测试是在根目录下,所以我创建了自定义目录,把它移到里面,然后运行成功。

这些对我有用,希望它可以为其他人节省时间。

【讨论】:

    【解决方案7】:

    这个问题很疯狂,就是这样。不要想太多。

    我如何修复它(Win10):

    1. 重启(可能没必要)
    2. 尝试运行测试
    3. 尝试在覆盖范围内运行

    它在 Android Studio 3.6.3 上为我修复了它

    这两种运行测试的方式是不同的,这种方式也可以为您解决问题。

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 2014-09-09
      • 2014-03-05
      • 2019-04-06
      相关资源
      最近更新 更多