51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3545|回复: 0
打印 上一主题 下一主题

[资料] 写点有价值的测试用例

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:02
  • 签到天数: 1046 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2016-6-28 14:42:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    这篇文章为《解读Android官方MVP项目单元测试》(以下简称《解读》)的附录部分,行此文的目的有二,其一是这个项目的单元测试齐全,覆盖率很高,有极高的学习价值,笔者希望把每个测试用例都描述一遍,通过这种方式来强迫自己认真的看完。其二,这部分内容难免枯燥,笔者尽力想把它写得可读性高一点点,却发现着实有难度,简直是给自己挖坑,所以从《写点有价值的测试用例》的角度出发,对这篇附录文章稍作修饰。但不管这样,这个MVP项目及其单元测试用例对我们的工作可以带来很多思路,所以不妨速读一遍。
      一、什么是有价值的测试用例
      以这个项目为例,我觉得对于测试用例的设计,不能离开架构层面和业务层面。
      1、架构层面
      不同的架构,决定着测试用例的写法不一,比如MVC或者MVP,每一层负责的测试职责是不一样的。 以todo-mvp这个项目为例,笔者在《解读》中已经提到,一个功能的测试需要MVP三层的协作,彼此各司其职,却又互相联系,这里再做一番总结:
      Presenter层:这一层很清晰,我们为它的每个接口方法,以及每个方法里涉及的多个逻辑路径设计相应的测试用例,值得注意的是,这一层我们不做输入输出的断言,而是验证是否正确覆盖V层和M层的逻辑。
      Model层:同上,我们为它的每个方法设计测试用例,与P层不同,这一层要断言输入输出数据是否准确。
      View层:这一层我们放在业务层面来讲。
      2、业务层面
      做单元测试,测试业务逻辑是重中之重。View层承担着这一重任,设计这一层的测试用例时,不要想太多,站在我们正常使用功能的角度出发,把交互行为翻译成Espresso的代码。由于View是入口,当一种交互行为发生,Presenter开始调度View和Model层各自执行逻辑,因此从这个角度来讲,View层的测试涵盖了MVP三层的逻辑。
      聊完有价值的,我们再来看看什么是没价值的测试用例。比如以下几种:
      (1)对成熟的工具类进行测试
      (2)对简单的方法进行测试(比如get、set方法)
      (3)MVP各层重复测试,比如P层去断言输入输出的正确性
      接下来笔者将完整的展示这个MVP项目中的所有单元测试用例,分为三个维度,androidTest下的、androidTestMock下的和test下的所有测试用例,如果觉得阅读起来枯燥,可以直接阅读每个测试类开篇的概述部分。
      二、androidTest文件下的测试
      V层:导航界面测试——AppNavigationTest
      概述:该测试用例做导航测试,即对DrawerLayout打开、关闭、点击Item后打开的Activity等功能进行测试。
      意义:告诉我们如何对DrawerLayout设计有价值的测试用例。
      (1)clickOnStatisticsNavigationItem_ShowsStatisticsScreen
      打开Left Drawer->点击Statistics按钮->断言StatisticsActivity已经打开
      (2)clickOnListNavigationItem_ShowsListScreen
      打开Left Drawer->点击Statistics按钮->打开Left Drawer->点击TO-DO list按钮->断言TasksActivity已经打开
      (3)clickOnAndroidHomeIcon_OpensNavigation
      验证通过ActionBar的icon进行关闭和打开Left Drawer
      V层:任务模块界面测试——TasksScreenTest
      概述:该测试用例针对任务列表和任务详情页的界面功能测试,涵盖所有页面上的交互,包括增删改查任务、改变任务状态,过滤任务列表等,除此之外还验证了横竖屏的交互对界面数据状态的影响。
      意义:告诉我们如何设计有价值的功能界面测试用例。
      (1)clickAddTaskButton_opensAddTaskUi
      点击添加按钮->断言相应Activity已经打开
      (2)addTaskToTasksList
      添加标题1的TO-DO任务后回到列表页->断言标题1存在
      (3)editTask
      添加标题1的TO-DO任务后回到列表页->点击此Item进入查看页面->点击编辑按钮->修改成标题2->点击保存->断言标题1不存在和标题2存在
      (4)markTaskAsComplete
      添加任务并点击CheckBox设置为已完成->通过过滤器进入All/Active/Completed视图,断言该任务是否存在
      (5)markTaskAsActive
      测试标记任务为Active状态,手法同上一点
      (6)showAllTasks
      添加2个任务->进入All视图->断言两个任务在界面上存在
      (7)showActiveTasks
      添加2个任务->进入Active视图->断言两个任务在界面上存在
      (8)showCompletedTasks
      添加2个任务->标记为已完成->进入Completed视图->断言两个任务在界面上存在
      (9)clearCompletedTasks
      添加2个任务->标记为已完成->点击Clear completed按钮->断言两个任务不存在
      (10)createOneTask_deleteTask
      添加1个任务->点击该任务进入详情页->点击删除->断言该任务不存在
      (11)createTwoTasks_deleteOneTask
      创建2个任务->删除第2个->断言第1个存在且第2个不存在
      (12)markTaskAsCompleteOnDetailScreen_taskIsCompleteInList
      创建1个任务->点击该任务进入详情页->标记为已完成->回到列表页->断言该任务为选中状态
      (13)markTaskAsActiveOnDetailScreen_taskIsActiveInList
      创建1个任务->在列表页标记为已选中->进入详情页标记为未选中->回到列表页->断言该任务未被选中
      (14)markTaskAsAcompleteAndActiveOnDetailScreen_taskIsActiveInList
      创建1个任务->在详情页触发两次checkbox的点击- 回到列表页->断言该任务未被选中
      (15)markTaskAsActiveAndCompleteOnDetailScreen_taskIsCompleteInList
      创建1个任务->标记为已完成->在详情页触发两次checkbox的点击- 回到列表页->断言该任务被选中
      (16)orientationChange_FilterActivePersists
      创建1个任务->标记为已完成->进入Active视图->验证该任务不存在->切换横竖屏->断言该任务状态与之前一致
      (17)orientationChange_FilterCompletedPersists

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏7
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 01:48 , Processed in 0.066402 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表