写点有价值的测试用例
作者:网络转载 发布时间:[ 2016/5/16 13:59:28 ] 推荐标签:软件测试 测试用例
创建1个任务->标记为已完成->进入Completed视图->验证该任务存在->切换横竖屏->断言该任务状态与之前一致
M层:本地数据库操作测试——TasksLocalDataSourceTest
概述:对数据库中处理Task的增删改查、改变Task状态等进行测试。
意义:持久层的CRUD往往需要配合起来测试和断言,此例很好的诠释了这一点
(1)saveTask_retrievesTask
测试目的:验证保存Task到数据库的逻辑
测试用例:实例化Task对象->保存入库->根据ID获取Task->在回调函数中断言与入库的Task一致
(2)completeTask_retrievedTaskIsComplete
测试目的:验证将任务设置成完成状态的逻辑
测试用例:Task对象保存入库->触发完成任务的逻辑->根据ID获取Task->在回调函数中断言该Task已完成
(3)activateTask_retrievedTaskIsActive
测试目的:验证将任务设置为激活状态的逻辑
测试用例:mock一个回调对象callback->Task对象保存入库->触发完成任务的逻辑->触发激活任务的逻辑->根据ID获取Task->断言callback执行了onTaskLoaded的逻辑
(4)clearCompletedTask_taskNotRetrievable
测试目的:验证清除所有已完成任务的逻辑
测试用例:mock三个回调函数对象,分别是callback1到3->保存任务1,任务2和任务3,其中任务1和任务2为completed状态,任务3为active状态->清理所有已完成的任务->根据3个Task的ID分别获取Task->断言callback1和callback2执行了onDataNotAvailable逻辑- >断言callback3执行onTaskLoaded逻辑
(5)deleteAllTasks_emptyListOfRetrievedTask
测试目的:验证删除数据库中所有任务的逻辑
测试用例:保存任务->mock一个回调函数callback->删除所有任务->获取任务列表->断言callback执行了onDataNotAvailable的逻辑
(6)getTasks_retrieveSavedTasks
测试目的:验证获取数据库中所有任务的逻辑
测试用例:保存2个任务->获取任务列表->在回调函数中断言这2个任务存在
三、androidTestMock文件下的测试
在《解读》一文中,笔者提到该文件夹主要的作用是对网络请求进行Fake,即不发出网络请求,而是返回事先定义好的数据。
V层:新增编辑任务界面测试——AddEditTaskScreenTest
errorShownOnEmptyTask
测试目的:验证保存或编辑任务时,如果输入空标题,会弹出Snackbar提示不能为空
测试用例:打开详情页->输入空标题和空描述->点击保存->通过Snackbar的消息内容验证Snackbar已显示
V层:统计界面测试——StatisticsScreenTest
Tasks_ShowsNonEmptyMessage
打开统计界面->事先Fake两条任务数据,状态分别为Completed和Active->断言两种统计栏目都已显示
V层:任务详情界面测试——TaskDetailScreenTest
概述:Fake出不同状态的任务并在详情页进行标题、描述和状态的断言。
意义:指导我们如何对网络请求数据进行Fake。
activeTaskDetails_DisplayedInUi
Fake一条状态为Active的任务->打开详情页->断言标题、描述、任务状态
completedTaskDetails_DisplayedInUi
Fake一条状态为Complete的任务->打开详情页->断言标题、描述、任务状态
orientationChange_menuAndTaskPersist
横竖屏的测试手法与TasksScreenTest中一致,不再赘述。
四、test文件夹下的测试
P层:新增编辑任务测试——AddEditTaskPresenterTest
概述:进入Presenter层的测试后,我们不再去断言输入输出了,取而代之的是,断言是否正确的覆盖了View层和Model层的逻辑。AddEditTaskPresenter共有三个方法,分别是createTask、updateTask和populateTask,对应增加、修改、展示任务的功能,其中增加任务涉及到成功和失败的情况,因此有4个测试用例。
意义:这些Presenter层的测试可以教会我们如何Mock,如何verify,如何测试异步回调,以及如何完整的覆盖Presenter层的所有逻辑路径。
saveNewTaskToRepository_showsSuccessMessageUi
创建Presenter,执行创建任务的逻辑->断言Model层执行了保存的逻辑->断言View层执行了显示任务列表的逻辑
saveTask_emptyTaskShowsErrorUi
创建Presenter,执行创建任务的逻辑,且任务Title为空->断言View层执行了展示error的逻辑
saveExistingTaskToRepository_showsSuccessMessageUi
此用例验证的是update任务的逻辑,测试手法同1。
populateTask_callsRepoAndUpdatesView
测试目的:验证详情页展示的任务信息是否正确
测试用例:presenter执行populateTask()->断言执行了getTask(),且参数正确->断言回调函数执行了正确的逻辑->断言View层展示的是正确的Task数据
P层:统计功能测试——StatisticsPresenterTest
概述:该类的presenter接口比较简单,只有一个入口方法start,执行的是加载统计信息的逻辑,执行过程中涉及几个路径:加载空任务列表,加载非空任务列表和数据不可用,分别对应以下1,2,3点。
loadEmptyTasksFromRepository_CallViewToDisplay
断言加载空任务列表
loadNonEmptyTasksFromRepository_CallViewToDisplay
断言加载非空任务列表
loadStatisticsWhenTasksAreUnavailable_CallErrorToDisplay
断言数据不可用
P层:任务详情功能测试——TaskDetailPresenterTest
概述:该Presenter共有5个方法,分别是:
start:展示任务详情,涉及三种路径:展示Active任务、展示Compeled任务和展示非法ID的任务,对应1,2,3的测试用例
deleteTask:删除任务,对应第4个测试用例
completeTask:完成任务,对于第5个
activateTask:激活任务,对应第6个
editTask:编辑任务,对应第7个,编辑非法ID的任务对应的测试用例为第8个
getActiveTaskFromRepositoryAndLoadIntoView
getCompletedTaskFromRepositoryAndLoadIntoView
getUnknownTaskFromRepositoryAndLoadIntoView
deleteTask
completeTask
activateTask
activeTaskIsShownWhenEditing
invalidTaskIsNotShownWhenEditing
P层:任务列表功能测试——TasksPresenterTest
概述,此TasksPresenter的测试与上一点类似,从接口方法出发,此类共有10个接口方法,为此设计了8个测试用例,分别是展示All/Active/Completed的任务列表、点击打开任务详情页、改变任务状态等。
loadAllTasksFromRepositoryAndLoadIntoView
loadActiveTasksFromRepositoryAndLoadIntoView
loadCompletedTasksFromRepositoryAndLoadIntoView
clickOnFab_ShowsAddTaskUi
clickOnTask_ShowsDetailUi
completeTask_ShowsTaskMarkedComplete
activateTask_ShowsTaskMarkedActive
unavailableTasks_ShowsError
M层:数据操作门面类测试——TasksRepositoryTest
概述:该类的测试用例非常齐全,对于如何设计测试用例让数据过期,如何让数据取自本地或者网络等测试技巧都有极高的学习价值。
getTasks_repositoryCachesAfterFirstApiCall
getTasks_requestsAllTasksFromLocalDataSource
saveTask_savesTaskToServiceAPI
completeTask_completesTaskToServiceAPIUpdatesCache
completeTaskId_completesTaskToServiceAPIUpdatesCache
activateTask_activatesTaskToServiceAPIUpdatesCache
activateTaskId_activatesTaskToServiceAPIUpdatesCache
getTask_requestsSingleTaskFromLocalDataSource
deleteCompletedTasks_deleteCompletedTasksToServiceAPIUpdatesCache
deleteAllTasks_deleteTasksToServiceAPIUpdatesCache
deleteTask_deleteTaskToServiceAPIRemovedFromCache
getTasksWithDirtyCache_tasksAreRetrievedFromRemote
getTasksWithLocalDataSourceUnavailable_tasksAreRetrievedFromRemote
getTasksWithBothDataSourcesUnavailable_firesOnDataUnavailable
getTaskWithBothDataSourcesUnavailable_firesOnDataUnavailable
getTasks_refreshesLocalDataSource
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南