阅读更多

在本文中, 我将根据我的实际经验,为大家阐述一个编写测试用例的最佳实践。在本文中我将使用 Espresso 编码, 但是它们可以用到单元测试和仪器测试(instrumentation test)当中。基于以上目的,我们来研究一个新闻程序。

以下内容纯属虚构,如有雷同纯属巧合

一个新闻 APP 应该会有以下这些 activity。
  • 语言选择 - 当用户第一次打开软件, 他必须至少选择一种语言。选择后,选项保存在共享偏好中,用户跳转到新闻列表 activity。
  • 新闻列表 - 当用户来到新闻列表 activity,将发送一个包含语言参数的请求到服务器,并将服务器返回的内容显示在 recycler view 上(包含有新闻列表的 id, news_list)。 如果共享偏好中未存语言参数,或者服务器没有返回一个成功消息, 就会弹出一个错误对话框并且 recycler view 将不可见。如果用户只选择了一种语言,新闻列表 activity 有个 “Change your Language” 的按钮,或者如果用户选择多种语言,则按钮为 “Change your Languages” 。 (我对天发誓这是一个虚构的 APP 软件)
  • 新闻细节 - 如同名字所述, 当用户点选新闻列表项时将启动这个 activity。

这个 APP 功能已经足够,,让我们深入研究下为新闻列表 activity 编写的测试用例。 这是我第一次写的代码。

仔细想想测试什么
在第一个测试用例 testClickOnAnyNewsItem(), 如果服务器没有返回成功信息,测试用例将会返回失败,因为 recycler view 是不可见的。但是这个测试用例的目的并非如此。 不管该用例为 PASS 还是 FAIL,它的最低要求是 recycler view 总是可见的, 如果因某种原因,recycler view 不可见,那么测试用例不应视为 FAILED。正确的测试代码应该像下面这个样子。


一个测试用例本身应该是完整的
当我开始测试, 我通常按如下顺序测试 activity:
  • 语言选择
  • 新闻列表
  • 新闻细节
因为我首先测试语言选择 activity,在测试 NewsList activity 之前,总有一种语言已经是选择好了的。但是当我先测试新闻列表 activity 时,测试用例开始返回错误信息。原因很简单 - 没有选择语言,recycler view 不会显示。注意, 测试用例的执行顺序不能影响测试结果。 因此在运行测试用例之前, 语言选项必须是保存在共享偏好中的。在本例中,测试用例独立于语言选择 activity 的测试。


在测试用例中避免使用条件代码
现在在第二个测试用例 testChangeLanguageFeature() 中,我们获取到用户选择语言的个数,基于这个数目,我们写了 if-else 条件来进行测试。 但是 if-else 条件应该写在你的代码当中,而不是测试代码里。每一个条件应该单独测试。 因此,在本例中,不是只写一条测试用例,而是要写如下两个测试用例。


测试用例应该独立于外部因素
在大多数应用中,我们与外部网络或者数据库进行交互。一个测试用例运行时可以向服务器发送一个请求,并获取成功或失败的返回信息。但是不能因从服务器获取到失败信息,就认为测试用例没有通过。这样想这个问题 - 如果测试用例失败,然后我们修改客户端代码,以便测试用例通过。 但是在本例中, 我们要在客户端进行任何更改吗?- NO。

但是你应该也无法完全避免要测试网络请求和响应。由于服务器是一个外部代理,我们可以设想一个场景,发送一些可能导致程序崩溃的错误响应。因此,你写的测试用例应该覆盖所有可能来自服务器的响应,甚至包括服务器决不会发出的响应。这样可以覆盖所有代码,并能保证应用可以处理所有响应,而不会崩溃。

正确的编写测试用例与编写这些测试代码同等重要。
  • 大小: 117.6 KB
  • 大小: 40.5 KB
  • 大小: 51.7 KB
  • 大小: 44.5 KB
  • 大小: 41.8 KB
来自: Linux中国
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Android单元测试

    通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后可能要进行多次单元测试,以证实程序满足需求。  ?那为什么要做单元测试呢?  ?我们首先来看看Android程序员常见的自测方式:

  • Android 单元测试,从小白到入门开始

    Android 应用越来越壮大,对应代码量显著增加,代码逻辑也日趋复杂,此时需要采取一定的行动去保证代码质量,减少逻辑漏洞等,于是严格地执行单元测试编写任务,将单元测试落实到平常开发和维护任务当中去,就是很...

  • Android应用开发中单元测试分析

    本文主要和大家分享如何在Android应用开发过程中如何进行单元测试,个人在做项目的过程中,觉得单元测试很有必要,以保证我们编写程序的正确性。下面我们先大概了解下单元测试,以及单元测试的作用。  单元测试(又...

  • android studio 单元测试详解

    本文我们将讲解如何在Android studio中进行单元测试。在Android开发项目中,经常会进行测试操作,而一次又一次的运行模拟器,浪费了大量时间,降低了工作效率降低,虽然最新的Android studio中提供了instance run...

  • Android 单元测试只看这一篇就够了

    单元测试的目的以及测试内容 本地测试 1. 添加依赖,google官方推荐: 2. 单元测试代码存储位置: 3. 创建测试类: 4. 运行测试用例: 5. 通过模拟框架模拟依赖,隔离依赖: 仪器化测试 配置: 例子: 常用单元...

  • Android单元测试全解

      自动化测试麻烦吗?说实在,麻烦!有一定的学习成本。但是,自动化测试能节省时间来打游戏!!

  • 【android】AS中使用Junit单元测试和Android JUnit 单元测试

    如果使用单元测试,编写单元测试类,执行测试单元测试类就可以对某些功能进行测试,大大提升了开发工作效率。 2. 添加单元测试支持 在AndroidStudio项目中,如果是新版本的AndroidStudio中新建的,会自动添加了单元...

  • Android单元测试框架介绍 -- 调研篇

    查阅了关于Android单元测试的一些资料后,发现网上对于现有的单元测试框架说法褒贬不一,各有优缺点,在框架的选择上也是需要很多因素来决定,因此我总结了一下最近的调研,对现有的单元测试框架做下简单介绍,列举...

  • Android开发中如何做单元测试

    为什么要做测试 撰写测试有以下好处: 确保开发出来的app功能是正确的 保证新增加的功能开发不会影响原来的功能,就是说新写的代码不会使原来正常工作的代码产生bug 当采用测试驱动开发模式时,测试有助于模块化...

  • Android实战——单元测试从吹水到实践

    本文从到底要不要单元测试开始讨论,说明了单元测试的好处,并列举了自己进行单元测试的路程,希望可以帮助到大家。

  • Android 单元测试框架 JUnit 4

    JUnit 4 是一个流行的 Java 单元测试框架,它可以帮助开发者编写并运行单元测试代码。

  • Android单元测试和UI测试你会做吗?

    Xu朝旭的博客地址:https://juejin.im/user/57d6268879bc44005e583e8f对于大多数 Android 商业项目,基本都是处于高速迭...

  • android的单元测试,Android 单元测试(Button 点击测试)

    android源码中引入了java单元测试的框架(android源码目录:libcore\junit\...android具体框架类的关系图如下: 从上图的类关系图中可以知道,通过android测试类可以实现对android中相关重要的组件进行测试(如Activit...

  • Android 仪器化单元测试(instrumented unit tests) Androidx kotlin版本

    android仪器化单元测试全面详解,全新kotlin androidx版本。 快速上手不迷路。

  • Android 单元测试-运行

    不过本地单元测试和AndroidTest的运行略有区别。按方法:按测试类:按包:按模块Gradle 运行时,只能运行所有测试。通过运行 任务即可启动测试运行完成后的报告位于 目录。通过运行 任务即可启动测试运行完成后的...

  • 基于springboot大学生就业信息管理系统源码数据库文档.zip

    基于springboot大学生就业信息管理系统源码数据库文档.zip

  • 基于java的驾校收支管理可视化平台的开题报告.docx

    基于java的驾校收支管理可视化平台的开题报告

  • 原木5秒数据20241120.7z

    时间序列 原木 间隔5秒钟 20241120

Global site tag (gtag.js) - Google Analytics