Android中的Junit测试与Java Junit测试有所不同,不能简单的使用标注……

假设写了一个MathUtils类,有两个静态方法:

 public class MathUtils {

       public static int add(int x, int y){

            return x+y;

       }

       public static int mul(int x, int y){

            return x*y;

       }

 }

要测试这两个方法,可以在当前项目中新建一个类继承自AndroidTestCase,在该类中编写测试方法:

 public class Test extends AndroidTestCase {

       @Override

       protected void setUp() throws Exception {

            // TODO Auto-generated method stub

            super.setUp();

       }

       public void testAdd(){

            assertEquals(5, MathUtils.add(2, 3));

       }

 public void testMul(){

            assertEquals(6, MathUtils.mul(2, 3));

       }

       @Override

       protected void tearDown() throws Exception {

            // TODO Auto-generated method stub

            super.tearDown();

       }

 }

注意重写父类的setUp()方法会在所有测试用例执行之前被调用,可以用来放置一些初始化操作;tearDown()方法在所有测试用例执行之后被调用,可以用来放置一些资源释放操作。

这时,Run as Junit Test,会出现如下错误:

008test does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner in its AndroidManifest.xml

这是因为在执行之前,还需要在Manifest.xml文件中配置Instrumentation和uses-library。

修改Manifest.xml如下:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"

     package="cn.csc.test"

     android:versionCode="1"

     android:versionName="1.0" >

     <uses-sdk

         android:minSdkVersion="10"

         android:targetSdkVersion="18" />

     <instrumentation android:name="android.test.InstrumentationTestRunner"

         android:targetPackage="cn.csc.test">

     </instrumentation>

     <application

         android:allowBackup="true"

         android:icon="@drawable/ic_launcher"

         android:label="@string/app_name"

         android:theme="@style/AppTheme" >

         <uses-library android:name="android.test.runner"/>

     </application>

 </manifest>

注意:instrumentation节点是防止manifest根节点下的,其targetPackage属性指定要测试的项目的包名,这里测试自己,所以写的是该项目自己的包名。

uses-library是放在application节点下的。

此时,再右击Test,选择Run as Android Junit Test

发现testAdd()和testMul()都被调用了。

若修改下testMul方法,将其重命名为mulTest(),再右击Test,选择Run as Android Junit Test

只有testAdd()方法被调用了,mulTest()没有被调用。

可以如同Java Junit一样,右击某个方法名,如mulTest(),run as android junit test:

这时,mulTest()自己执行了。

通过以上可以,执行测试类时,会自动把所有以test打头的方法都执行一遍的。要执行单个测试方法,可以右击要执行的方法名,然后run as android junit test。

上面的示例是在一个项目中自己测试自己,若要测试别的项目怎么办?

测试其他项目

如,新建一个009mathutils项目,把MathUtils放到该项目的cn.csc.mathutils包下,然后要在008test中测试这个MathUtils的方法:

修改008test中的Manifest.xml中instrumentation中的targetPackage属性:将其设置为cn.csc.mathutils。

 <instrumentation android:name="android.test.InstrumentationTestRunner"

         android:targetPackage="cn.csc.mathutils">

只是这样,还是不行的,因为cn.csc.mathutils中的MathUtils类在008test中是不可见的,这时需要进行一下build path的设置:

右击008test项目名,选择build path,configure build path:

在Projects选项卡中,点击add按钮,添加009mathutils项目,然后Ok即可。

此时,009mathutils项目中的类在008test中就可见了。然后就可以进行正常的测试工作了。

其实,要测试其他项目有更简单的方式:

新建一个Android Test Project :

new ->  other

选择Android Test Project ,然后next

设置项目名称,然后next

选择要测试的项目,这里选择009mathutils,next

之后,默认,然后finish即可。

在创建该项目的过程中, Manifest.xml及build path都被Eclipse自动设置好了,然后直接进行测试工作即可。

补充:adb工具还能对项目进行冒烟测试(压力测试)   命令格式:adb shell monkey -p 要测试项目的包名 -v 测试事件数量

如: adb shell monkey -p cn.csc.lifecycle -v 1000

测试过程:

可以测试出程序中一些不易发现的bug。

android菜鸟学习笔记15----Android Junit测试的更多相关文章

  1. android菜鸟学习笔记30----Android使用百度地图API(一)准备工作及在应用中显示地图

    1.准备工作: 百度地图API是免费开放的,但是需要申请API Key: 1)先注册一个百度开发者帐号 2)进入百度开放服务平台http://developer.baidu.com/ 3)进入LBS云 ...

  2. android菜鸟学习笔记29----Android应用向用户发送提示信息的方式总结

    常见的向用户发送提示信息的方式有3种,分别为: 1)发送Toast信息 2)弹出对话框 3)发送通知 总结如下: 方式1:发送Toast信息: 这种方式最简单,在之前的学习中多次使用过.Toast是在 ...

  3. android菜鸟学习笔记31----Android使用百度地图API(二)获取地理位置及地图控制器的简单使用

    1.获取当前地理位置: Android中提供了一个LocationManager的类,用于管理地理位置.不能通过构造函数获取该类的实例,而是通过Context的getSystemService(): ...

  4. android菜鸟学习笔记28----Android中的Service生命周期及本地和远程服务绑定的实现

    Service是Android中长期在后台运行的没有界面的组件,使用服务的优势在于:能够提高进程的优先级,系统不容易回收掉进程,即便回收了,内存充足的时候,会把进程重新创建. 1.服务的简单使用示例: ...

  5. android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据

    主要是基于HTTP协议与服务端进行交互. 涉及到的类和接口有:URL.HttpURLConnection.HttpClient等 URL: 使用一个String类型的url构造一个URL对象,如: U ...

  6. android菜鸟学习笔记21----ContentProvider(一)ContentProvider的简单使用

    ContentProvider是Android四大组件之一,它用来封装数据,并通过ContentResolver接口将数据提供给其他应用.只有当需要在多个应用之间共享数据时才会用到ContentPro ...

  7. android菜鸟学习笔记17----Android数据存储(一)文件读写

    假如有如下需求,要求能够记录用户输入的用户名和密码,下次登录时,能直接获取之前保存的用户名密码,并在相应的EditText中显示. 要保存用户输入的数据,最先想到的应该就是文件读写了. 通过对andr ...

  8. android菜鸟学习笔记14----Android控件(三) ListView的简单使用

    MVC模式: MVC的基本原理就是通过Controller连接View和Model.当View中所显示的数据发生变化时,会通知Controller,然后由Controller调用Model中的相关方法 ...

  9. android菜鸟学习笔记8----Activity(一)

    Activity是android应用程序中重要的组件之一,常听到的android四大组件是Activity.Service.BroadcastReceiver和ContentProvider.它间接继 ...

随机推荐

  1. FZU 2125 简单的等式 【数学/枚举解方程式】

    现在有一个等式如下:x^2+s(x,m)x-n=0.其中s(x,m)表示把x写成m进制时,每个位数相加的和.现在,在给定n,m的情况下,求出满足等式的最小的正整数x.如果不存在,请输出-1. Inpu ...

  2. 10.1综合强化刷题 Day6

    T1 排序 题目描述 小Z 有一个数字序列a1; a2; .... ; an,长度为n,小Z 只有一个操作:选 定p(1<p<n),然后把ap 从序列中拿出,然后再插⼊到序列中任意位置. ...

  3. codevs——1048 石子归并 (区间DP)

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解       题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并 ...

  4. Android 进度条对话框ProgressDialog

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  5. [置顶] 一个简单好用的zabbix告警信息发送工具

    之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员. 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了. zabbix告警一直是我的痛 ...

  6. hdu1862

    //开始把student stu[100000]放置在main()中导致栈溢出,所以必须放在全局位置, //可以调用数组的排序函数sort,包含头文件#include<algorithm> ...

  7. Linux下监听或绑定(bind)21端口失败

    问题:写了一个程序,尝试在21端口监听,结果在执行bind的时候失败了. sockaddr_in sock_addr; sock_addr.sin_family = AF_INET; sock_add ...

  8. CSS 属性选择器的深入挖掘

    CSS 属性选择器,可以通过已经存在的属性名或属性值匹配元素. 属性选择器是在 CSS2 中引入的并且在 CSS3 中得到了很好拓展.本文将会比较全面的介绍属性选择器,尽可能的去挖掘这个选择器在不同场 ...

  9. HTML border CSS输出三角形

    有以下一段html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  10. 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(3)

    plist 中的每一页 utteranceSting 我们都创建了一个RWTPage.displayText.因此,每页的文本会一次性地显示出来. 由于 You've constructedeach ...