Android Testing学习02 HelloTesting 项目建立与执行

  Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程。

  下面,新建一个Android待测试的项目,即普通的Android工程,这里起名为:MainProject

新建测试工程

  再建一个测试项目,叫MainProjectTest,对MainProject进行测试。

  可以直接右键New->Project…->Android Test Project:

  项目名起为:MainProjectTest

  点击Next,选择要测试的项目为待测试的项目,这里即为MainProject。

  选择好后,测试项目就建立成功了。

IDE帮我们做了什么?

  测试项目虽然建立成功了,但是IDE帮我们做了什么呢?

  首先,比较明显的是生成了对应的包名,在原来的包名后加了.test:

  com.shengqishiwind.myproject.test

  其次,打开测试项目的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.shengqishiwind.myproject.test"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.shengqishiwind.myproject" /> <application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application> </manifest>

AndroidManifest.xml

  解释标注如下:

  最后一个改变,右键MainProjectTest项目,Properties->Java Build Path->Projects,可以看到已经加入了MainProject,引入了被测试工程,所以测试工程可以访问被测试工程的类

创建测试

  创建测试仍然可以直接利用IDE:

  在测试项目的包上右键->New->JUnit Test Case:

  创建如下:

  点击Next,可以选择生成一些方法,到时候按照需要选择吧。

  生成的测试类代码如下,加上了print语句:

package com.shengqishiwind.myproject.test;

import junit.framework.TestCase;

public class MyFirstTest extends TestCase
{ public MyFirstTest(String name)
{
super(name);
System.out.println("MyFirstTest");
} protected void setUp() throws Exception
{
super.setUp();
System.out.println("setUp()");
} protected void tearDown() throws Exception
{
super.tearDown();
System.out.println("tearDown()");
} public void testSomething()
{
System.out.println("testSomething()");
fail("Not implemented yet"); } }

  因为单元测试框架是基于JUnit 3的,所以方法需要以test开头。

  这里插一段:

  在JUnit 3.8中,测试方法需要满足如下原则:

  1.public的。

  2.void的。

  3.无方法参数。

  4.方法名称必须以test开头。 (它通过反射找出所有方法,然后找出以test开头的方法)。

运行测试

  1.最简单的方法:运行所有测试:

  右键测试项目Run As ->Android JUnit Test

  这样将运行项目中所有的测试。

  2.运行一些test case:

  右键项目:Run As -> Run Configurations,然后在其中选择Run a single test.

  这里看到也可以自选一些test case来一起运行。

  运行后的结果在左边的JUnit小窗口中显示,LogCat中也有相关显示。

  3.通过命令行来运行测试

  先adb shell之后就可以通过如下命令行命令来运行测试:

  测试结果只能从LogCat中查看了。

  am instrument [flags] <COMPONENT>

  -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)

  -e <NAME> <VALUE>: set argument <NAME> to <VALUE>

  -p <FILE>: write profiling data to <FILE>

  -w: wait for instrumentation to finish before returning

  关于命令参数的更多,可以查看:http://developer.android.com/tools/testing/testing_otheride.html

  和 http://developer.android.com/reference/android/test/InstrumentationTestRunner.html

参考资料

  《Android Application Testing Guide》

  Android Testing官网链接:

  http://developer.android.com/tools/testing/index.html

  http://developer.android.com/tools/testing/activity_test.html

  http://developer.android.com/tools/testing/testing_otheride.html

  Testing Fundamentals

  http://developer.android.com/tools/testing/testing_android.html

  AndroidTestCase

  http://developer.android.com/reference/android/test/AndroidTestCase.html

  ViewAsserts

  http://developer.android.com/reference/android/test/ViewAsserts.html

  MoreAsserts

  http://developer.android.com/reference/android/test/MoreAsserts.html

  正则表达式:

  http://developer.android.com/reference/java/util/regex/package-summary.html

  InstrumentationTestRunner文档,其中有命令行运行测试相关:

  http://developer.android.com/reference/android/test/InstrumentationTestRunner.html

  关于JUnit 3的基础,本博客之前有文:

  http://www.cnblogs.com/mengdd/archive/2013/03/26/2983565.html

  

  博客:

  http://mintelong.iteye.com/blog/460903

  http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/

Android Testing学习02 HelloTesting 项目建立与执行的更多相关文章

  1. Android Testing学习01 介绍 测试测什么 测试的类型

    Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...

  2. android菜鸟学习笔记16----Android项目打包安装过程(Run as Android Application)

    右击项目名称,Run as Android Appication之后,Android项目打包安装过程: 1.打包生成.apk文件: 1)把源码中的.java文件编译生成.class文件 2)将所有的. ...

  3. android菜鸟学习笔记4----android项目结构

    src: 应用程序源代码存放目录 gen: 自动生成的目录,目录中存放所有由Android开发工具自动生成的文件. 目录中最重要的就是R.java文件. 这个文件由Android开发工具自动产生的.A ...

  4. android开发学习---基础知识学习、如何导入已有项目和开发一个电话拨号器

    一.基础知识点学习  1.Android体系结构 如图所示,android 架构分为三层: (1)最底层是linux内核,主要是各种硬件的驱动,如相机驱动(Camera Driver),闪存驱动(Fl ...

  5. Flutter实战视频-移动电商-02.Flutter实战建立项目和编写入口文件

    02.Flutter实战建立项目和编写入口文件 创建项目: flutter create flutter_shop 创建完成之后呢,它会提示我们, 进入flutter_shop的目录,然后执行flut ...

  6. Android Studio安卓学习笔记(一)安卓与Android Studio运行第一个项目

    一:什么是安卓 1.Android是一种基于Linux的自由及开放源代码的操作系统. 2.Android操作系统最初由AndyRubin开发,主要支持手机. 3.Android一词的本义指“机器人”, ...

  7. android studio学习----添加项目依赖包总结

    Gradle Library Projects Gradle 项目可以依赖于其它组件.这些组件可以是外部二进制包,或者是其它的 Gradle 项目. 在本例中, app/build.gradle 中有 ...

  8. Android Animation学习(二) ApiDemos解析:基本Animators使用

    Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...

  9. Android开发学习总结(一)——搭建最新版本的Android开发环境

    Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...

随机推荐

  1. 在这个变化的年代,IT人的方向在哪里?看两个故事

    王超是我的朋友,来京四年整.最初在一家民企做LINUX运维工程师,月薪5000.工作很认真,埋头苦干型,每天工作时间很长,让加班从来无怨言.即使是周末休假,只要有工作任务也是随叫随到.然而当他提涨薪时 ...

  2. 扫描线 + 线段树 : 求矩形面积的并 ---- hnu : 12884 Area Coverage

    Area Coverage Time Limit: 10000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit user ...

  3. Android流量控制——列表页面

    1.最简单的模式: 设计: 1.将页码值传给服务器,让服务器返回对应的页码数据 2.数据缓存:只缓存第一页数据. 好处: 1.实现简单.无脑 坏处: 1.浪费流量,如果用户一直在等某个人发送消息的话. ...

  4. 从C#到Objective-C,循序渐进学习苹果开发(5)--利用XCode来进行IOS的程序开发

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.前面几篇随笔主要介绍C#和O ...

  5. T-SQL 查询出某个列总值大于X的数据

    原文: https://www.lesg.cn/netdaima/sqlservert-sql/2016-459.html 今天操作查询的时候遇见一个这样的要求: 有一张表 用户ID 购买日期 购买金 ...

  6. Lua使用心得(2)

    在lua脚本调用中,如果我们碰到一种不好的脚本,例如: while 1 do do end 那我们的程序主线程也会被阻塞住.那我们如何防止这种问题呢?下面就给出一个解决的办法. 首先为了不阻塞主线程, ...

  7. ROW_NUMBER、RANK()、DENSE_RANK()和OVER的使用

    /*以FoodPrice列排序并显示排序后的行号*/ SELECT ROW_NUMBER() OVER(ORDER BY FoodPrice DESC) AS RowId,* FROM dbo.Foo ...

  8. 点我吧工作总结(技术篇) Cobar原理和环境搭建

    我思故我在,提问启迪思考! 1.什么是Cobar? Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务.cobar已经在阿里巴巴B2B公司稳定运行 ...

  9. Linux练习

    1.创建目录/perm ,在/perm目录下创建文件newfile ,授予/perm目录所有用户都有rwx权限: #创建perm目录 [root@CentOS62 ~]# mkdir perm [ro ...

  10. sso demo mysql ( cas )

    基本配置 参考之前得随笔  http://www.cnblogs.com/rocky-fang/p/5354947.html 1. tomcat-cas 修改配置 1.1 在D:\test\sso\t ...