最近接触到 单元测试 概念,准备学习一下。查阅了很多资料和书籍,发现很多资料上说的都是android studio比较早的版本用法。目前 as 2.2.2已经很完善了,并不用在工程创建完成后,再添加依赖什么的了。直接去编写测试用例就行了,很是方便的。

先上一张图:

新建的项目,总共分三部分:
1:androidTest 目录为编写Android测试用例使用,需要在模拟器上或者真机下测试。
2:我们的项目代码
3:test目录下是编写Java测试用例使用,在本地环境下就能测试,不需要模拟器或真机。

当然测试目录,你也可以自己新建一个。不过在我们在一开始创建项目时,人家就帮我们自动创建好了。建议就用自动创建好的。


第一部分讲解 (androidTest 目录):

(1)ExampleInstrumentedTest 类

这是我们在一开始创建项目时,人家就帮我们自动创建好的。它是使用注解的方式。

/** * Instrumentation test, which will execute on an Android device. * * @see Testing documentation */@RunWith(AndroidJUnit4.class)public class ExampleInstrumentedTest {    @Test    public void useAppContext() throws Exception {        // Context of the app under test.        Context appContext = InstrumentationRegistry.getTargetContext();        assertEquals("com.everyoo.broadcastbestpractice", appContext.getPackageName());    }    @Test    public void testAddActivity() {        assertEquals(0, 1);//方法第一个参数的意思是,我们预期的值;第二个参数的意思是,实际结果值。很显然它会报错。        assertEquals(1, 1);//这个就不会报错啦。    }}

(2)InstrumentationTestCase 类

Instrumentation和Activity有点类似,只不过Activity是需要一个界面的,而Instrumentation并不是这样的,我们可以将它理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。

举个例子,利用InstrumentationTestCase 启动一个activity:
在androidTest下新建一个java类,并且继承自InstrumentationTestCase,编写一个public void的方法,但是必须要是方法名以test打头,比如testPublishSubject,并不需要@Test注解。

public class TestAndroidClass extends InstrumentationTestCase {    private static final String TAG = "TestAndroidClass";    public void test() throws Exception {        assertEquals(0, 0);    }    public void testPublishSubject() {        launchActivity("com.everyoo.broadcastbestpractice", LoginActivity.class, null);    }

(2)ApplicationTestCase 类

ApplicationTestCase——测试整个应用程序的类。它允许你注入一个模拟的Context到应用程序中,在应用程序启动之前初始化测试参数,并在应用程序结束之后销毁之前检查应用程序。

使用Context,你可以浏览资源,文件,数据库等等。基类是AndroidTestCase,一般常见的是它的子类,和特定组件关联。

public class MyApp extends Application {    @Override    public void onCreate() {        super.onCreate();        String app_name = getResources().getString(R.string.app_name);        Log.i("MyApp", ".........MyApp....app_name.........." + app_name);    }}public class ApplicationTest extends ApplicationTestCase<MyApp> {    public ApplicationTest() {        super(MyApp.class);    }    public void testStart() {        String str = null;        str = mContext.getResources().getString(R.string.app_name);        Log.i("..", ".............ApplicationTest ...........app_name............." + str);    } 

(2)ActivityUnitTestCase 类

ActivityUnitTestCase——对单个Activity进行单一测试的类。使用它,你可以注入模拟的Context或Application,或者两者。它用于对Activity进行单元测试。也就是说你可以用于测试单独的activity ,虽然也需要利用模拟机或真机启动,但你启动的只是你需要做测试的activity,于其他activity无关。

总结:还有很多常见的测试,比如ServiceTestCase,ProviderTestCase2等,大家需要慢慢琢磨。
第二部分,就是我们的项目代码,不在多说啦。


第三部分讲解 (test 目录):

比如我需要测试一段java代码,而这段java代码跟android没关系,也就是不用到android的资源,如context,activity 等,说白了就是简单的 java 测试,当然android studio也是可以做java代码测试的。同样,在我们一开始创建好工程时,人家就自动帮我们创建好了。

/** * Example local unit test, which will execute on the development machine (host). * * @see Testing documentation */public class ExampleUnitTest {    @Test    public void addition_isCorrect() throws Exception {        assertEquals(4, 2 + 2);    }}

如果要想脱离 模拟器 或 真机,又要做使用android资源的测试,如:使用Context,浏览资源,文件,数据库等等。 也是可以的! 那就只有第三方测试框架了 Robolectric。目前Robolectric3.0就是很好的一个单元测试框架。经查阅资料发现,写这篇博客时,Robolectric3.0只兼容到sdk=21。

Robolectric3.0相关资料:

git地址

官方地址

Robolectric使用时的一些坑:
http://blog.csdn.net/ethanco/article/details/52350019

Android单元测试框架Robolectric3.0介绍(一)

Android单元测试框架Robolectric3.0介绍(二)


可用学习参考的博客:

简单谈谈android studio 的单元测试
http://www.jb51.net/article/90449.htm

鸿洋微信推荐地址(Android测试之旅(一))

更多相关文章

  1. AndroidManifest.xml文件详解(三)
  2. Android中使用WebView建立应用程序
  3. 重磅来袭!2020 年需要关注的 5 大 Android(安卓)开发技术,抓破脑袋
  4. android sharedUserId sharedPreferences
  5. ant编译android
  6. [置顶] 两分钟彻底让你明白Android(安卓)Activity生命周期(图文)
  7. Android(安卓)Studio 学习 - 程序安装
  8. Android远程Service(AIDL)的简单实例
  9. 图文来教你在eclipse下用gradle 来打包Android

随机推荐

  1. Android 中常见bug 总结
  2. Android 关于下接框(spinner)的使用
  3. android 上传图片到服务器
  4. android studio 配置checkstyle
  5. (OK) 编译batman-adv.ko—成功—android
  6. android app 与电脑wifi通信
  7. Android中保存Logcat信息到文件
  8. android EditText 只能输入无法删除的解
  9. Android(安卓)获取内存、内部存储、外部
  10. Android menu 使用初步