Android Studio 进行单元测试完整教程

转载 2016年08月30日 14:28:13


Android Studio更新到2.0以后,在build variants窗口下没有 test artifact选项,无法选择是Android Instrumentation Tests还是Unit Tests,如下图。


Google一下,解决方案是依次打开: File Menu -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Experimental,

Enable all test artifacts (Unit Test and Instrumentation Test) in Android projects取消勾选,之后我们熟悉的Test Artifact就出现了,如下图




编写测试用例步骤

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

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

这里写图片描述 
androidTest.java.[包名] 
main.java.[包名] 
test.java.[包名]
 
- mian目录下为项目代码,androidTest目录下为编写Android测试用例使用,test目录下未编写Java测试用例使用。

gradle文件

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

编写Java测试用例

<code class="hljs java has-numbering" style="display: block; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; "><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">import</span> org.junit.Test;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">import</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">static</span> org.junit.Assert.*;

<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box; ">/**
 * To work on unit tests, switch the Test Artifact in the Build Variants view.
 */</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">public</span> <span class="hljs-class" style="box-sizing: border-box; "><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102); ">ExampleUnitTest</span> {</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">final</span> String TAG = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; ">"ExampleUnitTest"</span>;

    <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box; ">@Test</span>
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">void</span> <span class="hljs-title" style="box-sizing: border-box; ">addition_isCorrect</span>() <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">throws</span> Exception {
        assertEquals(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box; ">4</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box; ">2</span> + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box; ">2</span>);
    }
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 6px; padding-right: 0px; padding-bottom: 40px; padding-left: 0px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style-type: none; list-style-position: initial; list-style-image: initial; text-align: right; "><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">1</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">2</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">3</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">4</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">5</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">6</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">7</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">8</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">9</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">10</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">11</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">12</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">13</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">14</li></ul>

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

这里写图片描述

  • 打开测试用例类,即上面的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,并写了一个方法,完整代码如下:

<code class="hljs java has-numbering" style="display: block; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; "><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">import</span> android.test.InstrumentationTestCase;


<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">public</span> <span class="hljs-class" style="box-sizing: border-box; "><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102); ">TestAndroidClass</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102); ">InstrumentationTestCase</span> {</span>


    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">private</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">final</span> String TAG = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box; ">"TestAndroidClass"</span>;

    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">void</span> <span class="hljs-title" style="box-sizing: border-box; ">test</span>() <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box; ">throws</span> Exception{
        assertEquals(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box; ">2</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box; ">2</span>);
    }
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 6px; padding-right: 0px; padding-bottom: 40px; padding-left: 0px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style-type: none; list-style-position: initial; list-style-image: initial; text-align: right; "><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">1</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">2</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">3</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">4</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">5</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">6</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">7</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">8</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">9</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">10</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">11</li><li style="box-sizing: border-box; padding-top: 0px; padding-right: 5px; padding-bottom: 0px; padding-left: 5px; ">12</li></ul>
  • 测试用例执行方法同Java测试用例,但是 Build Variants 的 Test Artifact 选项框一定要更改为 Android Instrumentation Tests。
  • 注意事项,在android studio中,所有的测试代码必须以test-作为前缀,不然android studio无法识别它为测试代码。(以test为前缀的方法是高亮的,非test的前缀则不是,通过这一点也可以证明)

最后的话: 
Build Variants的选择很重要,如果选择Unit Tests,Android的测试用例就会不被识别,反之Java的测试用例不被识别,所以在跑测试用例时一定选对标签。

文章部分内容的编写参考了这个博客 
官方测试用例教程在这里

本文转载自http://blog.csdn.net/pdskyzcc1/article/details/50953083
http://blog.csdn.net/wutongyu0123wutongyu/article/details/51898642


相关文章推荐

AndroidStudio2.0以上进行单元测试详解

AndroidStudio2.0以上版本在单元测试这块相对以前有些改变。 一、介绍 1,点击 Build Variants,Test Artifact没有 Build Variants的位置如下...

Android Studio环境下Android单元测试(基于Robolectric+Mockito)

Android的单元测试不需要运行App,所有的任务都交给Robolectric和Mockito去做,简单方便。...
  • ruyi366
  • ruyi366
  • 2016年06月21日 14:45
  • 2597

简单谈谈android studio 的单元测试

面对android studio Run 一次项目要等好几分钟的痛点,不得不研究一下android studio 的单元测试。 其实我的目的很简单,在不对视图进行操作的前提下,测试一些activi...

Android Studio 测试小结

Android Studio 2.0 创建的工程,会生成两个默认的测试目录:test和androidTest,其中,test目录为在本机执行单元测试代码的目录,androidTest为在Android...

在Android Studio中进行单元测试和UI测试

from:原文链接 本篇教程翻译自Google I/O 2015中关于测试的codelab,掌握科学上网的同学请点击这里阅读:Unit and UI Testing in Andro...

Android Studio 进行单元测试完整教程

前言 为了这个AndroidStudio的单元测试,从下午搞到晚上才搞明白咋操作。 我学一个新知识总是那么坎坷,经历无数的错误路径,才可能找到正确的路在哪儿。 我的AndroidS...

初识IntelliJ IDEA下JUnit单元测试

由于之前进行单元测试时,没有用JUnit测试框架,逐步接触到其后,它的功能实在是太强大了。本文主要初步介绍如何在IntelliJ IDEA上简单使用JUnit。在Android Studio上创建mo...
  • BAT_os
  • BAT_os
  • 2016年11月27日 19:36
  • 10495

使用Android Studio进行单元测试

使用Android Studio进行单元测试 转自 http://blog.csdn.net/zhaokaiqiang1992/article/details/45332513 ...
  • skykingf
  • skykingf
  • 2015年05月06日 15:19
  • 37203

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android 单元测试之JUnit和Mockito

Android 单元测试之JUnit和MockitoJUnit使用JUnit测试框架需要引入依赖,在新建项目的时候,Android Studio已自动帮我们引入了该依赖dependencies { ...
  • EthanCo
  • EthanCo
  • 2016年08月26日 17:38
  • 2656
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Studio 进行单元测试完整教程
举报原因:
原因补充:

(最多只允许输入30个字)