【问题标题】:How to run a simple JUnit4 test in Android Studio 1.1?如何在 Android Studio 1.1 中运行一个简单的 JUnit4 测试?
【发布时间】:2015-05-04 18:47:38
【问题描述】:

我有一个显示“Hello World”的 Android 项目。它是从 Android Studio 的“Blank Activity”模板创建的。

然后我在我的应用程序包(与我的活动相同的包)中添加/创建一个新的 java 类。我称它为 Shape 并添加一个简单的构造函数

public class Shape {
    public Shape(int i){
        if (i==0){
            throw new IllegalArgumentException("Cant have 0");
        }
    }
}

太好了。现在我有一个完全不接触 Android 的课程,我想对它进行单元测试。接下来我该怎么做?

我的问题到此为止。下面我将介绍我尝试过的内容。

请注意,我以前从未在 Android 或 Java 中进行过测试。请原谅我的“新手”错误。

  1. 在 Shape.java 中,我转到“导航”>“测试”
  2. 按回车键选择“创建新测试”
  3. 获取此弹出窗口,然后选择 JUNIT4。

  1. 然后我点击修复按钮来修复未找到的库
  2. 我收到了这个弹出窗口

  1. 我不确定要选择什么,所以我选择默认/突出显示。
  2. 我写我的测试

    package com.eghdk.getjunit4towork;
    
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    public class ShapeTest {
        @Test(expected = IllegalArgumentException.class)
        public void testShapeWithInvalidArg() {
            new Shape(0);
        }
    }
    
  3. 此时,我不确定如何运行我的测试,但尝试这样做:

  4. 运行时出现这些错误

    错误:(3, 17) Gradle: 错误: 包 org.junit 不存在
    错误:(5, 24) Gradle:错误:包 org.junit 不存在
    错误:(8, 6) Gradle: 错误: 找不到符号类 Test

【问题讨论】:

    标签: java android unit-testing junit android-studio


    【解决方案1】:

    从 Android Studio 1.1 开始,有(实验性的)unit test support。该页面的一些引用:

    您必须在 build.gradle 中指定您的测试依赖项 你的 android 模块的文件。例如:

    dependencies {
      testCompile 'junit:junit:4.12'
      testCompile "org.mockito:mockito-core:1.9.5"
    }
    

    要在 AS 中使用单元测试支持,您必须执行以下步骤:

    1. 更新 build.gradle 以使用 android gradle 插件版本 1.1.0-rc1 或更高版本(在 build.gradle 文件中手动或在文件 > 项目结构的 UI 中)

    2. 向 app/build.gradle 添加必要的测试依赖项(见上文)。

    3. 在 Settings > Gradle > Experimental 中启用单元测试功能。

    4. 同步您的项目。

    5. 打开“构建变体”工具窗口(左侧)并将测试工件更改为“单元测试”。

    6. 为您的测试源代码创建一个目录,即 src/test/java。您可以从命令行或使用 项目工具窗口中的项目视图。新目录应该是 此时以绿色突出显示。注:测试源名称 目录由 gradle 插件根据约定确定。

    7. 创建您的测试。您可以通过打开一个类、右键单击其名称并选择“转到 > 测试”来完成此操作。添加一些测试 案例。
    8. 右键单击您的新测试类或方法并选择“运行...”。
    9. (可选)您可以直接使用 Gradle 来减少编译时间。为此,请转到“运行”菜单并选择“编辑 配置”。在那里,找到默认的 JUnit 模板,删除 启动前“制作”步骤并添加“Gradle 感知制作”步骤 (将任务名称留空)。

    重要的是要知道有两种测试类型:androidTest 和普通test

    • androidTest 主要用于您在模拟器或设备上运行的测试,例如仪器测试。在命令行中,您可以使用 ./gradlew connectedCheck 来运行这些。
    • test 用于您不想在设备上运行的测试,例如您编写的单元测试。您运行 ./gradlew test 来运行这些测试。

    如引用中所述,您可以通过更改测试工件在 Android Studio 中切换 androidTesttest

    当然,最好不要在设备或模拟器上运行测试,因为这会大大加快测试过程。借助新的实验性单元测试支持,您无需使用设备即可访问存根 Android API。这让您可以将更多测试从 androidTest 移动到 test

    【讨论】:

    • 您似乎在谈论必须在设备上运行的特定于 Android 的单元测试。甚至在 AS 和 Android for Gradle 插件 1.1 发生这种变化之前,我认为您仍然可以在本地机器上运行基本的单元测试(没有 Android 设备)。话虽如此,即使 AS 1.1 已经发布,我觉得我不必启用实验性功能来获得 PLAIN java 单元测试。我的问题是让那些(普通的java单元测试)工作。你知道如何让它发挥作用吗?
    • 在 1.1 之前,我使用了 Android Unit TestAndroid Studio Unit Test 插件,它们正是启用了这个功能。自然,这些插件已被弃用,取而代之的是新添加的功能。
    • 减少 JUnit 测试执行时间的建议也很棒!
    • 做得很好!您在区分InstrumentationTestUnitTestandroidTesttest 方面做得非常出色。谢谢 nhaarman :)
    • @MuhammadBabar 断点对我有用。 android.util.Log 但是,当您简单地运行单元测试时,由于没有 Android 环境,因此无法正常工作。为此,您可以使用System.out.print* 系列方法。
    【解决方案2】:

    对于 android studio 1.2 或更高版本,我提供了这个答案,因为这是谷歌的第一个排名,这是一个关于如何使用 Android Studio 设置单元测试的优秀且非常容易遵循的教程,这是链接: https://io2015codelabs.appspot.com/codelabs/android-studio-testing#1

    在浪费了 2 个小时尝试运行测试后,我终于用上面的链接完成了,希望它对你和我一样有用。

    【讨论】:

    • 在 Android Studio 2.2.1 中,在 Build Variants 下,“Test Artifact:”选择框不会出现,只有带有 Model 和 Build Variant 列的表格。所以要么它位于其他地方,要么你不再需要选择它。
    【解决方案3】:

    如今的 Android Studio(当前版本 1.4)具有完整的单元测试支持,无需任何变通方法。正如自动生成的 ExampleUnitTest 中所建议的那样:

    To work on unit tests, switch the Test Artifact in the Build Variants view.

    【讨论】:

    【解决方案4】:

    转到设置,然后构建工具,然后 gradle,然后进行实验。在实验中取消选中启用所有测试工件。游戏结束了

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多