android studio如何编译测试,Android Studio 进行单元测试完整教程

前言

为了这个AndroidStudio的单元测试,从下午搞到晚上才搞明白咋操作。

我学一个新知识总是那么坎坷,经历无数的错误路径,才可能找到正确的路在哪儿。

我的AndroidStudio

516a155b6a0e31ecbc2d2121300b617d.png

我的AndroidStudio是1.5.1版本,但是进行单元测试应该很早的版本就可以了,至少可以追溯到1.0

注意事项

当你google查找AndroidStudio单元测试时,有大量的资料教程,但是都不完整,至少跟着教程一步步的是无法看到自己想看的效果的。AndroidStudio自带的单元测试功能是不需要修改gradle或者AndroidManifest.xml文件的。直接编写测试用例即可。

编写测试用例步骤

以下以一个由AndroidStudio一步步创建的全新工程为例

在src目录下会包含三个目录:

32ff76a476109138b971926336333677.png

- androidTest.java.[包名]

main.java.[包名]

test.java.[包名]

- mian目录下为项目代码,androidTest目录下为编写Android测试用例使用,test目录下未编写Java测试用例使用。

gradle文件

增加testCompile 'junit:junit:4.12' 用于Java编写执行Java测试用例。

编写Java测试用例

import org.junit.Test;

import static org.junit.Assert.*;

/**

* To work on unit tests, switch the Test Artifact in the Build Variants view.

*/

public class ExampleUnitTest {

private static final String TAG = "ExampleUnitTest";

@Test

public void addition_isCorrect() throws Exception {

assertEquals(4, 2 + 2);

}

}

测试用例的执行才是最关键的点

3b664082f47701ff5e0da5e9b69b0df4.png

打开测试用例类,即上面的ExampleUnitTest

在AndroidStudio的界面做侧边栏下部,有两个工具栏(Build Variants 和 Favorites)

点击 Build Variants,Test Artifact 选项框选择Unit Tests(同理跑Android测试用例选择Android Instrumentation Tests)

在AndroidStudio的界面做侧边栏上部有一个structure工具标签,(如果找不到,可以通过 工具栏–View–Tool Windows–Structure 打开此工具标签),打开此标签就可以看到此测试用例类的所有方法

鼠标选中要测的方法,右键–Run [方法名],即可进行Java用例测试。

编写Android测试用例

我在androidTest.java.[包名]文件夹中添加了一个类TestAndroidClass,该类派生自InstrumentationTestCase,并写了一个方法,完整代码如下:

import android.test.InstrumentationTestCase;

public class TestAndroidClass extends InstrumentationTestCase {

private static final String TAG = "TestAndroidClass";

public void test() throws Exception{

assertEquals(2, 2);

}

}

测试用例执行方法同Java测试用例,但是 Build Variants 的 Test Artifact 选项框一定要更改为 Android Instrumentation Tests。

注意事项,在android studio中,所有的测试代码必须以test-作为前缀,不然android studio无法识别它为测试代码。(以test为前缀的方法是高亮的,非test的前缀则不是,通过这一点也可以证明)

最后的话:

Build Variants的选择很重要,如果选择Unit Tests,Android的测试用例就会不被识别,反之Java的测试用例不被识别,所以在跑测试用例时一定选对标签,我就是在这里耗费了大量时间,偶然在stackoverflow上看到有人提了一句,感谢。

文章部分内容的编写参考了这个博客

官方测试用例教程在这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】算法导论学习笔记 一 分治算法

分治策略是一种常见的算法。在分治策略中,我们递归的求解一个问题,在每层递归中应用如下三个步骤: 1. 分解,将问题分解成规模更小但解决方案相同的子问题 2. 解决,递归的求解子问题,如果子问题足够小则停止…

android 对话框白色样式,Android 对话框(Dialog)样式大全以及简单实现

下面是几种对话框的效果图一:图二:图三:图四:图五:图六:图七:图1效果:该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式。代码&…

【转】ABP源码分析二十一:Feature

Feature是什么?Feature就是对function分类的方法,其与function的关系就比如Role和User的关系一样。 ABP中Feature具有以下属性: 其中最重要的属性是name,用以表示feature的Identity,一个feature拥有一个name. 一个Feature可以有一…

巧克力情歌手---McKnight, Brian

巧克力情歌手---McKnight, Brian McKnight, Brian 1969年6月5日出生于美国纽约州的布法罗。Brian McKnight的哥哥Claude V. McKnight是福音音乐组Take 6的成员,Brian McKnight则是一名蓝调音乐歌手,他首先在布法罗及周…

android虚拟电话号码,为何安卓手机坚持虚拟按键?这才是原因

关于屏内虚拟按键设计的好坏,一直都存在很大的争议。围绕着屏内虚拟按键,支持者与反对者之间进行了长期的争论,至今仍未分出胜负。然而,当多功能前置指纹按键开始普及的时候,屏内虚拟按键似乎正在逐步走向边缘化。不过…

【转】ABP源码分析二十二:Navigation

MenuDefinition:封装了导航栏上的主菜单的属性。 MenuItemDefinition:封装了主菜单的子菜单的属性。子菜单可以引用其他子菜单构成一个菜单树 UserMenu/UserMenuItem:封装了用于显示给用户的菜单/以及子菜单集合。 ABP通过MenuDefinition/Me…

数据库调优都涉及哪些方面

面试时,经常被问及 “数据库调优”的事情,心想这不是DBA的事吗,但回答不好还是显得不够专业,查一下资料,许多还真是程序员的事情,下面总结一下,希望对大家有所帮助。方面以影响程度排序 D1 业务…

node.js android 聊天,Node.js实现简单聊天服务器

使用Nodejs是如此简单的实现了一个简单的聊天服务器实现代码如下:var net require(net);var chatServer net.createServer(),clientList [];chatServer.on("connection",function(client){client.name client.remoteAddress ":" client.r…

【转】ABP源码分析二十三:Authorization

Permission&#xff1a;用于定义一个Permission&#xff0c;一个permission可以包含多个子Permission. PermissionDictionary&#xff1a;继承自Dictionary<string, Permission>类&#xff0c;很明显是一个用于存储permission对象的字典。 IPermissionDefinitionContext…

VI/VIM键盘图

转载于:https://www.cnblogs.com/sdjc/archive/2006/09/14/1949532.html

android确认密码代码,Android手机卫士之确认密码对话框

本文接着实现“确认密码”功能&#xff0c;也即是用户以前设置过密码&#xff0c;现在只需要输入确认密码布局文件和《Android 手机卫士--设置密码对话框》中的布局基本类似&#xff0c;所有copy一下&#xff0c;修改一点细节就搞定&#xff1a;android:layout_width"matc…

修改MD5加密 提高网站安全

发表文章 修改MD5加密 提高网站安全2006-08-28 16:23:55大 中 小特别说明&#xff1a;此种改变只能用于在刚开始建站时才可&#xff0c;如果你中途改变的话就会出现问题。   也许提到MD5时大家都很熟&#xff0c;但你真的是这样吗&#xff1f;了解其是如何进行散列的实际过…

【转】ABP源码分析二十四:Notification

NotificationDefinition: 用于封装Notification Definnition 的信息。注意和Notification 的区别&#xff0c;如果把Notification看成是具体的消息内容&#xff0c;NotificationDefinition则是对这个消息自身的定义&#xff08;可理解为消息的类型&#xff09;。 INotification…

一剪梅

红藕香残玉簟秋。轻解罗裳&#xff0c;独上兰舟。 云中谁寄锦书来&#xff1f;雁字回时&#xff0c;月满西楼。 花自飘零水自流。一种相思&#xff0c;两处闲愁。 此情无计可消除&#xff0c;才下眉头&#xff0c;却上心头。转载于:https://www.cnblogs.com/daitengfei/archive…

android手机 scala环境,在Android中使用Scala中的Java常量

我在Android上的Scala中开发了一个奇怪的问题。我正在使用sbt android插件&#xff0c;现在我正在尝试让内容提供商工作&#xff0c;但是...在Android中使用Scala中的Java常量刚刚用Scala替换了Java的数组代码。它看起来像这样&#xff1a;val projection Array(People.NAME,P…

【转】ABP源码分析二十五:EventBus

IEventData/EventData: 封装了EventData信息&#xff0c;触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册&#xff0c;注销和触发事件处理函数的方法。EventBus定义了一个Dictionary容器来存放事件和处理该事件的对象(其实不是对象而是Factory&#xf…

深入Atlas系列:Web Sevices Access in Atlas示例(4) - 使用HTTP GET调用Web Services方法...

在之前的例子里&#xff0c;由于Atlas客户端在调用Web Services方法时总是使用了Sys.Net.ServiceMethod类&#xff0c;因此始终使用了HTTP POST方法与服务器端进行交互。POST方法有其好处&#xff0c;不过GET方法也自有其价值。我们在使用Atlas进行Web Services调用时&#xff…

【转】ABP源码分析二十六:核心框架中的一些其他功能

本文是ABP核心项目源码分析的最后一篇&#xff0c;介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系。当然可以自定义的去实现IAbpSession使之与CLR的Session关联 IAbpSession&#xff1a;定义如下图中的四个属性。 NullAbpSessio…

CASE 语句

--简单case函数 USE pubsGOSELECT Category CASE type WHEN popular_comp THEN 计算机类 WHEN mod_cook THEN 现代厨艺 WHEN business THEN 商业图书 WHEN psychology THEN 心理学 WHEN trad_cook THEN 传统厨艺 ELS…

【转】ABP源码分析二十七:ABP.Entity Framework

IRepository&#xff1a;接口定义了Repository常见的方法 AbpRepositoryBase&#xff1a;实现了IRepository接口的常见方法 EfRepositoryBase:实现了AbpRepositoryBase中定义的抽象方法&#xff1a;GetAll&#xff0c;Insert&#xff0c;Delete&#xff0c;Update。在实际项目…