Android 单元测试框架
来源:互联网 发布:可以注销淘宝店铺吗 编辑:程序博客网 时间:2024/05/16 12:51
Android 内置测试框架是基于 Junit3
通过 IDE 创建测试项目就好,自己搞要参照文档.主要配置就是AndroidManifest.xml
<instrumentation android:name="android.test.InstrumentationTestRunner" // 指定 Runner android:targetPackage="com.example.demo" /> // 要测试的包<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> // 还有这个</application>
测试相关的类都在 android.test
包下,主要的测试框架如下,都扩展自 TestCase
从类名可以看出个大概
AndroidTestCase 下基本都是与ui无关的,分别针对 Application、Loader、Provider、Service
InstrumentationTestCase 下则是 Activity 相关的,它提供了Instrumentation接口给TestCase的子类。 为了支持Activity测试,InstrumentationTestCase提供了生命周期控制,你可以启动,暂停,中止被测试的Activity。还有一些Mock对象如Context,Application来帮助测试Activity,从而帮助你控制测试环境并和实际的应用的其他部分隔离开来,以及一些UI事件。
- ActivityTestCase
Activity 测试的通用部分,主要用下面两个子类 ActivityInstrumentationTestCase2
使用的是app本身测试,不是mock对象,可用于多Activity交互You can run any test method on the UI thread (see UiThreadTest).
You can inject custom Intents into your Activity (see setActivityIntent(Intent)).- ActivityUnitTestCase
通常用来测试单独Activity。在启动被测试的Activity之前,你可以Inject一个假的Context或是Application ,使用这个Mock的Context中一个隔离环境中运行被测试的Activity。通常用于Activity的单元测试,而不和Anroid系统进行交互。 - SingleLaunchActivityTestCase
用于测试单个Activity,和ActivityUnitTestCase不同的是,它只运行setUp 和tearDown 一次,而不是在运行testCase 中每个Test Method前后运行setup 和tearDown ,它可以保证运行多个测试之间fixture 不会被重置,从而可以用来测试一些有关联的方法。 - SyncBaseInstrumentation
测试Content Provider同步性的类。它使用Instrumentation在启动测试同步性之前取消已经存在的同步对象。
一个简单的 Demo
IDE:Eclipse
先创建普通Android项目Demo
,再创建测试项目DemoTest
,指定测试目标为 Demo,Eclipse 会自动配好 Manifest
写两个需要测试的内容,一个 Activity,一个 Activity 无关的工具类
Demo MainActivity
public class MainActivity extends Activity { private TextView textView; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button1); textView = (TextView) findViewById(R.id.textView1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { textView.setText("hehe"); } }); }}
Demo StringUtils
public class StringUtils { // ... public static String get(String url){ return url; }}
DemoTest 里 MainActivityTest 用于测试 MainActivity,测试按钮点击后 TextView的值是否正确
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> { public MainActivityTest() { super(MainActivity.class); } public MainActivityTest(Class<MainActivity> activityClass) { super(activityClass); } private MainActivity mainActivity; @Override protected void setUp() throws Exception { super.setUp(); mainActivity = getActivity(); } public void testPre() { assertNotNull(mainActivity); } public void testBtnClick() { final Button button = (Button) mainActivity.findViewById(R.id.button1); TextView textView = (TextView) mainActivity .findViewById(R.id.textView1); assertNotNull(button); mainActivity.runOnUiThread(new Runnable() { @Override public void run() { button.performClick(); } }); // 代码跑太快…等等界面反应 SystemClock.sleep(1000); assertEquals("hehe", textView.getText()); }}
DemoTest StringUtilsTest
public class StringUtilsTest extends AndroidTestCase{ public void testGet(){ assertEquals("a", StringUtils.get("a")); }}
然后 Run As -> Android JUnit Test
其他测试相关类
android.mock 下是一些 mock 类
ViewAsserts、MoreAsserts、TouchUtils 在测试的时候都会用到。
- Android 单元测试框架
- Android单元测试框架
- Android使用单元测试框架
- Android单元测试框架-Espresso
- android测试框架之单元测试
- Android单元测试(三):JUnit单元测试框架的使用
- Android单元测试(三):JUnit单元测试框架的使用
- android单元测试二(JUnit框架)
- 关于Android单元测试的几种框架
- Android 中Junit 测试框架(单元测试)
- 在android中使用单元测试框架
- Android单元测试框架Robolectric3.0介绍(二)
- Android开发之单元测试框架Robolectric(一)
- Android Studio中单元测试框架的建立
- Android单元测试框架Robolectric3.0介绍(一)
- Android单元测试框架Robolectric3.0介绍(二)
- Android单元测试(一):JUnit框架的使用
- Android单元测试(二):Mockito框架的使用
- Trace32相关
- WatchService API实现监听文件系统中的文件变化(包括各级子目录)
- 关于String在OC中的一些操作(长沙戴维营)
- memset是如何赋值的以及一些遐想
- 对C++中虚基类的认识
- Android 单元测试框架
- 微软2016校园招聘在线笔试题目-第一题 Magic Box
- 关于高效大规模并发的epoll(nginx的优势)
- Unique Path II--LeetCode
- 学习SpringMVC笔记(全)
- 匿名函数 VS 闭包
- 多线程GCD
- 链表的反转简单实现
- 创建者模式——工厂方法模式(Factory Method)(2)