zoukankan      html  css  js  c++  java
  • android菜鸟学习笔记15----Android Junit测试

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

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

     1 public class MathUtils {
     2 
     3       public static int add(int x, int y){
     4 
     5            return x+y;
     6 
     7       }
     8 
     9       public static int mul(int x, int y){
    10 
    11            return x*y;
    12 
    13       }
    14 
    15 }

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

     1 public class Test extends AndroidTestCase {
     2 
     3       @Override
     4 
     5       protected void setUp() throws Exception {
     6 
     7            // TODO Auto-generated method stub
     8 
     9            super.setUp();
    10 
    11       }
    12 
    13       public void testAdd(){
    14 
    15            assertEquals(5, MathUtils.add(2, 3));
    16 
    17       }
    18 
    19 public void testMul(){
    20 
    21            assertEquals(6, MathUtils.mul(2, 3));
    22 
    23       }
    24 
    25       @Override
    26 
    27       protected void tearDown() throws Exception {
    28 
    29            // TODO Auto-generated method stub
    30 
    31            super.tearDown();
    32 
    33       }
    34 
    35 }

     注意重写父类的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如下:

     1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     2 
     3     package="cn.csc.test"
     4 
     5     android:versionCode="1"
     6 
     7     android:versionName="1.0" >
     8 
     9  
    10 
    11     <uses-sdk
    12 
    13         android:minSdkVersion="10"
    14 
    15         android:targetSdkVersion="18" />
    16 
    17     <instrumentation android:name="android.test.InstrumentationTestRunner"
    18 
    19         android:targetPackage="cn.csc.test">
    20 
    21     </instrumentation>
    22 
    23     <application
    24 
    25         android:allowBackup="true"
    26 
    27         android:icon="@drawable/ic_launcher"
    28 
    29         android:label="@string/app_name"
    30 
    31         android:theme="@style/AppTheme" >
    32 
    33        
    34 
    35         <uses-library android:name="android.test.runner"/>
    36 
    37     </application>
    38 
    39  
    40 
    41 </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。

    1 <instrumentation android:name="android.test.InstrumentationTestRunner"
    2 
    3         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。

  • 相关阅读:
    二叉排序树
    #define使用方法
    typedef函数指针使用方法
    ORACLE触发器具体解释
    C++第11周(春)项目2
    建立人际信任的方法
    Error creating bean with name &#39;menuController&#39;: Injection of autowired dependency……
    strtok和strtok_r
    session销毁
    嵌入式相关5
  • 原文地址:https://www.cnblogs.com/dqrcsc/p/4629260.html
Copyright © 2011-2022 走看看