如何在 Android Studio 中创建测试?

2023-12-01

刚刚下载了基于 Intellij Idea 的 Android Studio。

如何创建测试?

我注意到有一个创建测试模块的选项,但这似乎没有做任何事情,只使用 src 创建一个新项目

我还尝试按热键 CTRL+AlT+T,它允许在现有类上创建单元测试,但似乎想将其放置在当前项目中。当然这对 TDD 没有帮助

有人有这里的经验吗?


这个答案是针对刚刚开始进行 Android 测试的人的。我将提供两个简单的示例来帮助您了解测试的工作原理。如果您按照接下来的 10 分钟进行操作,您就可以开始将测试添加到您自己的应用程序中。我想你会惊讶地发现它是如此简单。我当然是。

Android 测试简介

您将进行两种不同类型的测试。

  • 本地单元测试。它们在 JVM(Java 虚拟机)上本地运行。因为他们是本地人,所以速度很快。您可以使用它们来测试代码中只需要 Java 而不需要 Android API 的部分。 (有时你可以制作一个假的 API 对象来在本地测试更多东西。这称为mocking。一个模拟Context是一个例子。)
  • 仪器化测试。这些测试在真实设备或模拟器中运行。这使得它们比本地测试慢。但是,它们更加灵活,因为您可以使用完整的 Android API。

创建一个新项目,您将看到以下默认文件夹。

enter image description here

一切都已准备就绪,等待您创建测试。一切都已经准备好了!

如何创建本地单元测试

打开ExampleUnitTest文件如上图所示。它应该看起来像这样:

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        assertEquals(4, 2 + 2);
    }
}

按双绿色箭头运行所有测试,或按单绿色箭头仅运行一项。 (在这种情况下,只有一个测试,因此它们都做同样的事情。)

enter image description here

它应该会通过(只要2 + 2还是4当你阅读这个答案时)。恭喜,您刚刚完成了第一次测试!

自己进行测试

让我们编写自己的测试。首先将此类添加到您的主应用程序项目中,以便我们可以测试一些内容:

public class MyClass {
    public int add(int a, int b) {
        return a + b;
    }
}

现在改变addition_isCorrect()测试类中的方法类似于以下代码(或者只是添加另一个具有不同名称的方法):

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        MyClass myClass = new MyClass();
        int result = myClass.add(2, 2);
        int expected = 4;
        assertEquals(expected, result);
    }
}

再次运行它,您应该会看到它通过了。恭喜,您刚刚创建了自己的第一个测试! (嗯,从技术上讲,我想这是我的,但是,嘿,足够接近了。我的就是你的。)

如何创建仪器化测试

打开ExampleInstrumentedTest文件。它应该看起来像这样:

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext() throws Exception {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        assertEquals("com.example.myapp", appContext.getPackageName());
    }
}

再次按下其中一个绿色按钮。

enter image description here

只要您连接了真实设备或设置了模拟器,它就应该启动并运行您的应用程序。恭喜,您刚刚运行了第一次仪器测试!

自己进行测试

仪器测试使用Espresso运行测试。它有点像您自己的小机器人用户,您可以测试您的应用程序。您可以告诉它执行一些操作,例如按下按钮或读取 TextView 的属性。

您可以编写有关如何手动进行测试的说明,但由于我们才刚刚开始,所以让我们使用自动录音功能。这非常简单。

首先向您的 UI 添加一个按钮,以便我们可以使用。我这样做了:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.myapp.MainActivity">

    <Button
        android:id="@+id/myButton"
        android:text="Click me"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</android.support.constraint.ConstraintLayout> 

然后按运行 > 记录浓缩咖啡测试在菜单中。

enter image description here

启动后,单击模拟器中的按钮,然后在“录制”对话框中选择“确定”以完成。它应该自动生成以下测试代码。

@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void mainActivityTest() {
        ViewInteraction appCompatButton = onView(
                allOf(withId(R.id.myButton), withText("Click me"), isDisplayed()));
        appCompatButton.perform(click());
    }
}

伟大的!您刚刚创建了第一个仪器测试!那太容易了。您可能应该添加一个断言以使其成为真正的测试,但这对于记录器来说也很容易做到。手表这个视频更深入一点。

进一步研究

我会先观看视频,然后阅读文档。这一切都非常有帮助。最后一个链接是一系列文章,其中涵盖了选择测试内容时需要考虑的一些重要事项。

  • Android 测试模式(Android 开发者的短视频系列)
  • 开始测试(安卓文档)
  • 通过 TDD 提高代码质量的三个步骤
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android Studio 中创建测试? 的相关文章

随机推荐

  • 您可以根据范围创建分组吗? [复制]

    这个问题在这里已经有答案了 这与另一个问题 我认为这确实解决了一个更简单的问题 所以我在这里问更简单的问题 希望它能帮助我解决更复杂的问题 我希望能够在 linq to sql 查询中创建一个分组 该分组基于另一组数据中的一系列数据 不过
  • 连接到 Hive 时出错。Error:java.sql.SQLException: 找不到适用于 jdbc:hive2 的驱动程序:

    您好 我正在尝试从 Nodejs 连接到 hive 我用了https www npmjs com package jdbc安装 JDBC 我收到以下错误 错误 运行静态方法 java sql SQLException 时出错 没有合适的 找
  • 如何将谷歌字体连接到页面?

    我已经使用了 Google Fonts 中关于如何设置字体的建议 所以我做了以下动作 1 在页面添加此依赖 2 将CSS设置为body标签 html body font family Roboto sans serif background
  • Python/Scapy:仅嗅探传入数据包

    我可以在 Scapy 中仅嗅探传入数据包或仅嗅探传出数据包吗 无需在数据包字段上添加过滤器 简短的回答 不 Scapy 的嗅探功能不区分传入和传出的数据包 如果你想根据源mac进行过滤 你可以这样做 MYMAC 12 34 56 78 90
  • 如何创建每个点有两种颜色的散点图?

    我正在尝试绘制两个地面实况 and my在 matplotlib 中同时分类 目前 我只在应用后绘制真实情况tsne在特征空间上并使用以下代码添加边缘 from matplotlib collections import LineColle
  • 多维矩阵(/数组)的矩阵乘法 - 如何避免循环?

    我正在尝试使用包含要相乘的多个矩阵的数组来评估矩阵乘法 这可以通过使用 np dot 或 Py3 5 中的新 运算符 的两个矩阵轻松实现 但我正在努力扩展它以有效地评估我的多维数组 举个例子 假设我有形状为 5 3 3 的矩阵 A 和形状为
  • 样式表 HTML 定义中的 media="" 属性指的是什么?

    相信有些人已经看过以下内容 或者其他什么 但媒体属性实际上有什么作用呢 我创建了几个网站 但在链接样式表时从未使用过媒体属性 这是一个错误吗 谢谢 阿米特 w3可以最好地解释它 媒体类型与用于查看页面的媒体有关 如果有人正在打印该页面 pr
  • Cortex-A57可以双发出128位neon指令吗?

    Cortex A57 优化指南指出 大多数对 128 位向量数据进行操作的整数指令都可以双发出 第 24 页 整数基本 F0 F1 逻辑 F0 F1 执行吞吐量 2 然而 根据我们的内部 综合 基准测试 即使有大量可用的指令并行性 吞吐量似
  • C# 枚举到 postgres 枚举

    我目前正在使用 postgres 枚举 CREATE TYPE http action enum AS ENUM GET HEAD POST PUT DELETE CONNECT OPTIONS TRACE PATCH CREATE TAB
  • 在 Backbone.js 中实例化子视图时如何避免内存泄漏

    myView Backbone View extend event binding etc etc render function render some DOM anotherView Backbone View extend event
  • 使用 Java 从单个文件读取图像元数据

    我想从单个文件中读取图像元数据 我尝试了以下代码 http johnbokma com java obtaining image metadata html 当我运行它时 我得到build successful但什么也没发生 public
  • OS X Java .app 捆绑包无法打开其他应用程序?

    我为 OS X 编写了一个 Java SWT 应用程序 将其导出为 jar 并将其捆绑到 app 中 除了我的应用程序中的关键部分之外 一切都按预期工作 它需要打开其他应用程序 我试过了Runtime exec 也ProcessBuilde
  • 自动为条形图旁边的标签留出足够的空间

    我正在制作一个水平条形图ggplot2 标签位于条形右侧 如何为标签留出足够的空间 以免它们脱离图表 这个问题之前已经被问过很多次了 但我的问题是关于自动地 这意味着无需手动调整 条形图旁边的空间即可为标签留出足够的空间 该用例是一个闪亮的
  • shell 命令查找进程 ID 并附加到它?

    我想使用 ddd 附加到正在运行的进程 我手动执行的操作是 ps ax grep PROCESS NAME 然后我得到一个列表和 pid 然后输入 ddd PROCESS NAME THE PID 有没有一种方法可以直接输入一个命令 备注
  • ConstraintLayout:全屏居中视图,但限制宽度不与侧视图重叠

    我有一个类似组件实现的工具栏 在所有情况下我都遇到布局问题 它有一个左侧图标 一个标题和一个右侧菜单 按钮 我需要标题在全屏 或至少布局的整个宽度 上居中 但也不与其他组件重叠 因此标题的宽度必须受到左侧图标和右侧按钮的限制 我有两个中间解
  • IIS 中的 Comet 编程

    据说Comet编程不推荐使用IIS 如果这是真的 那么其他 Web 服务器如何能够通过 IIS 处理此问题 那么其他 Web 服务器还额外做了哪些事情来允许它们横向扩展呢 由于某种原因 这个神话仍然存在 当然可以使用 IIS 来完成此操作
  • 使用新格式字符串记录变量数据

    我使用 python 2 7 3 的日志记录工具 这个Python版本的文档说 日志记录包早于较新的格式化选项 例如 str format 和 string Template 支持这些较新的格式选项 我喜欢带有花括号的 新 格式 所以我正在
  • 无法连接到 graph.facebook.com 端口 443:网络无法访问

  • 如何在 FreeBSD 中调试 rc.d 脚本?

    我的里面有一个 bash 脚本 usr local etc rc d 应该运行 python 脚本 我运行布什脚本 service script name start 却什么也没发生 我如何调试该 rc d 脚本 我怎么知道发生了什么事 F
  • 如何在 Android Studio 中创建测试?

    刚刚下载了基于 Intellij Idea 的 Android Studio 如何创建测试 我注意到有一个创建测试模块的选项 但这似乎没有做任何事情 只使用 src 创建一个新项目 我还尝试按热键 CTRL AlT T 它允许在现有类上创建