IntelliJ IDEA中如何使用JUnit4

2023-11-19


背景
最近参与了一个Anroid医疗项目,其中项目底层有很多基础类及通讯类,而且很多涉及复杂的字节操作还有多线程同步及状态机处理。这样的项目做一下TDD还是必要的,尽量项目前期把风险降低一些。
现在的问题是本人使用的是IntelliJ开发的Android项目,刚开始还真不知道怎么下手。在参考了一些资料后,总结了一下IntelliJ中配置JUnit测试环境的步骤,希望对大家有帮助。
环境:
操作系统:Windows 7
IntelliJ版本:13.1
Android SDK API:19
Java Version:1.7
JUnit 4子版本:JUnit 4.11(IntelliJ自带)
步骤:
一、在项目的AndroidManifest.xml文件中做如下更改:
在application节点下添加
<uses-library android:name="android.test.runner"/>,如图:
在根节点下添加如下内容:
其中targetPackage跟你所在项目的包名相同(参见你的AppManifest.xml文件顶部:
二、为你所在项目添加如下jar包引用
1、junit-4.11
2、harmcrest-core-1.3
3、annotations
三、调整项目对jar包的引用顺序
做这个调整是因为我们使用的Android API中包含了JUnit 3.8,默认SDK是放在最前面的,否则代码中的Junit会被认为是Junit 3.8,那你就只能使用Junit 3的测试方式了。
四、在项目目录树中,创建一个与src平级的目录用于存放所有的测试类。
简单起见我使用的是tests.
除了创建目录,我们还需要指定新创建的目录为测试根目录:
右键tests目录,选择'Mark Directory As'--->'Test Sources Root'
五、在你的测试根目录下创建你的测试分类目录及具体的测试类
在测试类内部你需要的只是给测试方法加上@Test标注。
六、运行你的测试
1、在代码编辑界面,在你的测试方法体中点击右键,在弹出的菜单中选中以JUnit的方式运行
这种方式非常适合刚写完测试,亟待看到某个测试的运行结果的场景。
还有一种使用快捷键的方式来单独运行某个测试,我们只需要将文本焦点切换到某个测试方法中,然后在使用组合键Ctrl+Shift+F10就可以达到同上面一样的测试效果。
2、编辑运行Configuration
点击Configuration按钮,在弹出界面中按如下步骤创建一个JUnit运行配置
在弹出的配置窗口做简单的配置。具体配置细节请参见本文参考部分的《IntelliJ IDEA对JUnit支持的官方文档》部分。
这种方式适合于批量执行测试的场景。
回顾JUnit3的使用方式
1、让你的测试类继承自Testcase
2、每个测试方法名必须以小写test为前缀
备注:IntelliJ IDEA已经内部支持JUnit4,Android SDK中也至少对JUnit3做了支持,因此并不需要再从Maven中对JUnit进行依赖管控。除非你需要使用最新的JUnit中的某项特性。
更新:
2014-10-16: 在开启JUnit4.0功能后项目中涉及Android生命周期的测试类(比如AndroidTestCase)将没有办法运行。原因在于AndroidTestCase这些是由SDK支持的,但是SDK中引用的是JUnit3.8的类库,我的理解是如果你引用的是JUnit4.0,那么在运行时AndroidTestCase这些Android特有的测试依赖的JUnit3.8在运行时是不会加载的,测试运行器尝试加载该类测试时就会报错。 因此,如果你希望在你的项目中测试与Android生命周期相关的类的话,那就只能在项目中摒弃JUnit4。
参考:
在IntelliJ IDEA的项目中开启Annotations
IntelliJ IDEA对JUnit支持的官方文档
IntelliJ IDEA提供的JUnit测试的Sample项目
ADT中如何配置JUnit
JUnit4测试说明:
JUnit4在IntelliJ IDEA中的使用(应该有三篇,但是只有后两篇可见。可能第一篇就是将配置的,但是不可见--有点遗憾)
Android单元测试初探--Instrumentation
IntelliJ IDEA和ADT的持续测试插件Infinitest
ADT中使用JUnit的一个教程
一个老程序员的Android测试驱动开发实践系列3篇(主要侧重界面交互测试)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IntelliJ IDEA中如何使用JUnit4 的相关文章

  • 在android 10中设置通知操作的背景颜色

    我已经做到了这一点图片链接 https i stack imgur com o0Cel jpg通过关注这篇文章https medium com dcostalloyd90 show incoming voip call notificati
  • 自定义相机预览问题(拉伸)

    我的相机应用程序出现问题 我的应用程序有 1 CameraActivity class和 2 CameraPreview class CameraPreview实施一个surfaceView它是从哪里调用的CameraActivity以进行
  • PickContact 需要 android.permission.READ_CONTACTS 或 grantUriPermission()

    首先一些信息 我首先在 Cordova 中创建了该应用程序 请参阅Cordova 权限需要 android permission READ CONTACTS 或 grantUriPermission https stackoverflow
  • 如何使用字符串搜索将一种布局膨胀为另一种布局

    如何将两者都加粗xml来自带有 switch case 的搜索字符串的字符串 我想更改每个 xml 字符串textview此更改将在按钮单击时发生 String strfistsearch mylist get 7 get data4 if
  • Android-使用 ViewHolder 和 AsyncTask 加载联系人-缩略图问题

    我正在创建一个自定义联系人应用程序 我使用带有 ViewHolder 设计模式的 ArrayAdapter 进行优化 由于加载缩略图需要花费大量时间 因此我使用 AsyncTask 类来加载图像 用于第一组联系人我的屏幕上 图片加载得很好
  • Android模拟器收不到推送通知

    我在谷歌云上使用推送通知 但是由于某种原因我无法在模拟器上接收推送通知 然而 当我在真实设备上测试时 同一个应用程序确实会收到通知 有其他人遇到过这个问题或找到解决方案吗 模拟设备具有网络访问权限 并且与真实设备具有相同的 Android
  • eclipse中更新ADT后出错

    我的 eclipse 中 ADT 的最新版本是 API 16 所以我更新了 ADT eclipse gt Help gt Install new software gt Work with ADT 然后发生了多个错误 我什至无法打开 And
  • Android 多个 SurfaceView

    我正在尝试在一个屏幕上使用 3 个 SurfaceView 一个在上半部分 BoardView 一个在下半部分 StatusView 最后一个作为上半部分 TileView 上方的额外层 请参阅 main xml 我创建了一个类MySurf
  • 自定义溢出图标太大(使用 android.support.v7 和 AppCompat)

    我的目标是让操作栏为红色 但由于默认 Android 库中我的唯一选项是白色和黑色 因此我尝试对其进行自定义 我通过在 gimp 上使用油漆桶来填充白色图标并以不同的名称重新保存它 从而制作了一些自定义红色图标 我对溢出图标做了同样的事情
  • 3D 旋转 - 透视

    public class MainActivity extends Activity LinearLayout rotator protected void onCreate Bundle savedInstanceState super
  • 自定义 URL 方案不是 Outlook 中的链接 (iOS/Android)

    我们的应用程序可以使用自定义 URL 方案启动 例如myapp mainpage param 123 当它作为链接包含在网页中时 此功能有效 而且 在 iOS 上 它可以在平台附带的邮件客户端中运行 用户注册并安装该应用程序后 他会收到一封
  • Android 中的弹出消息

    我正在开发一个应用程序 我想创建一条弹出消息 在我们不关闭时该消息将保持稳定 我想要一些教程来帮助我制作警报对话框 提前致谢 我认为您正在搜索 对话框 框 从而可以向用户显示警报消息 确认消息等 欲了解更多信息 请参阅此 http deve
  • 在 Java/Android 中查找 UTF-8 字符串中的字符数

    我试图找出字符串以 UTF 8 存储时的长度 我尝试了以下方法 String str Charset UTF8 CHARSET Charset forName UTF 8 byte abc str getBytes UTF8 CHARSET
  • Android 拍摄后画质低

    我有一个触发图像捕获的按钮 private void capturePicture if ActivityCompat checkSelfPermission getContext Manifest permission CAMERA Pa
  • Android:iOS UIActionSheet 等效项

    我正在转换一个 iOS 应用程序 并且需要实现从 iOS 到 Android 的 UIActionSheet 的等效项 什么 UI 元素最能模仿这一点 我的目标是 Android 2 2 及更高版本 您将使用 AlertDialog 或 D
  • 如何修复Android模拟器中“无法连接到相机服务”异常

    当我在模拟器中运行 Android 应用程序时 出现无法连接到相机服务异常 我已经阅读了各种现有的帖子 但没有一个修复了这个问题 显然是 Camera open 调用失败了 我最终想让网络摄像头在模拟器中运行 正如许多 SO 帖子所讨论的那
  • Android 检测片段何时分离

    我可以轻松检测到Fragments附于Activity via Activity onAttachFragment 但我怎样才能检测到Activity那一些Fragment脱离活动了吗 没有Activity onDetachFragment
  • XML 渲染错误 Android 预览 N

    更新后我已将 android SDK 更新为 android Preview N 但收到此 xml 渲染错误 单击详细信息后 它显示以下堆栈跟踪如何避免这种情况 org jetbrains android uipreview Renderi
  • 错误:找不到 com.google.firebase.storage.UploadTask.TaskSnapshot 类型的符号方法 getDownloadUrl()

    在 gradle update 之前一切正常 但后来弹出了这个错误 我参考了官方文档 它提供了相同的代码 不接受 getDownloadUrl 方法 https i stack imgur com YLC2x png 我已经添加了最新的正确
  • 如何解决“布局有超过 80 个视图,对性能不利”?

    我正在做一个有点复杂的布局 只是我无法修复 LINT 指示的错误 黑莓浏览次数超过 80 对性能不利 这是布局

随机推荐

  • 解决Eclipse没有serve及无tomcat9.0

    网上一般提供的 Kepler repository http download eclipse org releases kepler 版本老 在Eclipse help install new 直接输入版本时间 出现如下 我的版本是201
  • 区块链java的demo_区块链-java入门Demo-Go语言中文社区

    正在创建第一个区块链 创建区块 00000d3c0681cd67f8050ab996e1400f99c0060ba4cb22d0c07685d9ae50cd10 正在创建第二个区块链 创建区块 00000eafdd53bed5586d480
  • 使用h5标签需要兼容,不使用没有标签进行语义化,如何取舍?兼容IE6,7,8,canvas,video

    HTML5已向开发人员提供了很多新的标签 如section nav article header和footer等 这些标签语义化程度高 会被经常使用 但在IE6 IE7 IE8和Firefox 2等老式浏览器中却不能识别和正常使用 很多浏览
  • 记录问题: HTTPSConnectionPool(host=‘files.pythonhosted.org‘, port=443): Read timed out.

    python报错 HTTPSConnectionPool host files pythonhosted org port 443 Read timed out 这个问题目前遇到都是因为网速引起的 解决办法是 使用命令 pip instal
  • 国际快递查询代码,网站的online track

    今天高兴了一把 只花了一小片的功夫 解决了一个大问题 哈哈 使用以下代码 就可以使用17track网站来查询国际单号 跟踪快递 航空包裹 不同的是 我可以随意更改自己想要的 比如按钮值 页面样式 增加一些效果等 以下是 文本域可以清空的效果
  • python一维数组变三维数组_python numpy 一维数组转变为多维数组的实例

    python numpy 一维数组转变为多维数组的实例 如下所示 import numpy new list i for i in range 9 numpy array new list reshape 3 3 借助numpy库 以上这篇
  • 服务器上安装anaconda

    1 下载anaconda 这里有两种方法 第一种在官网上下载对应版本的安装包 地址 https www anaconda com products individual 再将安装包上传到服务器 之后输入命令 完成安装 第二种方法 在控制台上
  • Generative AI 新世界

    在上一篇 Generative AI 新世界 大型语言模型 LLMs 概述 中 我们一起探讨了大型语言模型的发展历史 语料来源 数据预处理流程策略 训练使用的网络架构 最新研究方向分析 Amazon Titan LLaMA PaLM E 等
  • android的webView的教程,Android WebView 应用界面开发教程

    WebView组件本身就是一个浏览器实现 Android5 0增强的WebView基于Chromium M37 直接支持WebRTC WebAudio WebGL 开发者可以直接在WebView中使用聚合 Polymer 和Material
  • Python 查找文件夹下某一类型的文件

    查找文件夹下面的某一类型的文件 并输出列表 import os 例如txt格式 def get files list directory file type txt file list for f root f dirs f files i
  • Springboot使用slf4j记录日志

    前言 在项目开发中 记录日志是必做的一件事情 而当我们使用Springboot框架时 记录日志就变得极其简单了 springboot内置了slf4j日志框架 我们只需要添加依赖 做一些简单的配置就ok了 下面 我们就来看看在Springbo
  • python圆的代码:如何使用Python绘制一个圆形

    Python圆的代码可以使用matplotlib库中的Circle函数来实现 Circle函数接受两个参数 一个是圆心的坐标 x y 另一个是圆的半径r 下面是一个简单的Python代码示例 Python圆的代码可以使用matplotlib
  • Matlab连接字符串的方法

    Matlab连接字符串的方法 2011 04 20 13 22 42 转载 标签 杂谈 分类 matlab 在Matlab中 想要将两个字符串连接在一起 有以下的方法 假定有两个字符串 gt gt str1 Iloveyou str2 12
  • 【SQL注入-15】自动化注入案例—以sqli-labs-less9为例(利用sqlmap工具)

    目录 1 前言 2 自动化注入案例 以sqli labs less9为例 2 1 实验平台 2 2 注入前准备 2 3 判断注入点及注入类型 2 3 1 自动判断注入点及注入类型 2 3 2 手动判断注入点及注入点类型 2 4 爆库名 2
  • 云函数部署之网易云

    云函数部署之网易云 云函数 什么是云函数 就是可以让你没有服务器 本地电脑不用下载Python也可以使用这个项目 而且还是白嫖 既解决了很多人部署的麻烦 也给了那些被劝退的朋友回来的勇气 十分钟便可以全部弄完 1 进入云函数 这里拿腾讯云的
  • caffe im2col 详解

    caffe im2col详解 本文讲解的是caffe中卷积过程 众所周知caffe中卷积采用的是im2col和sgemm的方式 网上已经有很多的im2col的讲解 原本不打算写这篇文章 在此不得不吐槽下 网上有不少的讲解caffe im2c
  • redis缓存雪崩、穿透、击穿

    这篇文章我们来了解一下一些redis的高并发问题以及他的解决方法 上图是一个简单的数据查询流程 前台请求 后台先从缓存中取数据 取到直接返回结果 取不到时从数据库中取 数据库取到更新缓存 并返回结果 数据库也没取到 那直接返回空结果 一 r
  • CentOs8 安装 Mysql 8 步骤及问题解决

    1 Mysql数据库采用的版本是Mysql8 在Mysql官方网站 MySQL 下载Mysql安装包 2 安装新版mysql之前 我们需要将系统自带的mariadb lib卸载 执行命令 rpm qa grep mariadb 若检查出系统
  • sql数据库查询

    sql数据库查询要点 查询 在GROUP BY 的后面使用 HAVING指定筛选条件 select from 表 group by 分组条件 having 筛选条件 内连接INNER JOIN 只返回符合条件的值 SELECT FROM t
  • IntelliJ IDEA中如何使用JUnit4

    背景 最近参与了一个Anroid医疗项目 其中项目底层有很多基础类及通讯类 而且很多涉及复杂的字节操作还有多线程同步及状态机处理 这样的项目做一下TDD还是必要的 尽量项目前期把风险降低一些 现在的问题是本人使用的是IntelliJ开发的A