当前位置: 首页 > news >正文

【Android】JUnit和Espresso单元测试新手快速入门

引入依赖

android {defaultConfig {testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}}dependencies {testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.0'androidTestImplementation 'androidx.test:rules:1.1.0'androidTestImplementation 'androidx.test:runner:1.1.0'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'}

Java代码测试

package com.android.myapplication;import org.junit.Test;import static org.junit.Assert.*;public class ExampleUnitTest {@Testpublic void addition_isCorrect() {assertEquals(4, 2 + 2);}}

点击被Test标注的方法,左侧的运行按钮,就可以执行测试任务

AndroidUI测试

package com.android.myapplication;import static androidx.test.espresso.Espresso.onView;import static androidx.test.espresso.action.ViewActions.click;import static androidx.test.espresso.matcher.ViewMatchers.withId;import android.content.Context;import androidx.test.platform.app.InstrumentationRegistry;import androidx.test.ext.junit.runners.AndroidJUnit4;import androidx.test.rule.ActivityTestRule;import org.junit.Assert;import org.junit.Rule;import org.junit.Test;import org.junit.runner.RunWith;@RunWith(AndroidJUnit4.class)public class ExampleInstrumentedTest {@Rulepublic ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule(MainActivity.class, true);@Testpublic void useAppContext() {//验证包名是否正确Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();Assert.assertEquals("com.android.myapplication", appContext.getPackageName());//模拟点击事件onView(withId(R.id.fab)).perform(click());//启动ActivityactivityTestRule.getActivity();}}

点击被Test标注的方法,左侧的运行按钮,就可以执行测试任务

查看测试报告

测试任务执行完毕,会在app/build/reports目录下生成测试报告

报告会统计所有测试任务的执行结果,已经通过率

注意事项

Android单元测试,特别是Espresso框架,依赖于Gradle插件和SDK版本

Gradle插件版本不兼容,SDK版本不兼容,手机不支持时,单元测试都可能会执行失败

可能会遇到的意外比较多,如果不幸遇坑,需要靠自己去耐心尝试

http://www.lryc.cn/news/136832.html

相关文章:

  • 8.4 【C语言】通过指针引用字符串
  • 【广州华锐视点】AR配电所巡检系统:可视化巡检利器
  • 微服务中间件--http客户端Feign
  • C语言学习系列-->【关于qsort函数的详解以及它的模拟实现】
  • Linux系统安全:NAT(SNAT、DNAT)
  • 【数据库】MySQL存储过程:提升数据库性能和操作效率的利器
  • rust写一个多线程和协程的例子
  • react18+antd5.x(1):Notification组件的二次封装
  • jenkins运行pytest测试用例脚本报错:没有权限,无法写日志PermissionError:[Error 13]Permission denied
  • 数据结构 day1
  • 湖北咸宁农业三维扫描数字化农业3d打印制造应用-CASAIM中科广电
  • Jenkins的定时任务配置
  • THINKPHP 微联云投票系统源码独立版 + 支持刷礼物
  • Mongodb两种启动方法
  • Python:列表的浅拷贝与深拷贝
  • OnePlus Open可折叠手机:规格、价格、发布日期等详细信息汇总!
  • SQL 数据库
  • 【算法系列篇】滑动窗口
  • 多维时序 | MATLAB实现BiTCN-BiGRU-Attention多变量时间序列预测
  • Docker容器与虚拟化技术:Docker compose部署LNMP
  • 高性能服务器Nodejs操作Mysql数据库
  • ffmpeg将rtsp流转成mp4
  • 第十四天|层序遍历、226.翻转二叉树 (优先掌握递归)、101. 对称二叉树 (优先掌握递归)
  • 如何使用装rancher安装k8s集群(k8s集群图形化管理工具)
  • 类加载器与双亲委派
  • 用Python创造乐趣:编写你自己的探索游戏世界
  • git stash弹出栈中的指定内容
  • 5.7 汇编语言:汇编高效乘法运算
  • Graphql中的N+1问题
  • mysql、oracle、sqlserver常见方法区分