10.7 Robolectric介绍
Robolectric(http://pivotal.github.com/robolectric/)是一个单元测试框架,它会拦截Android类,然后重写方法的实现。Robolectric重定义了Android方法,因此它们都会返回默认值,比如null、0又或者false。并且,如果把他们方法调用,它会唤起影子对象,提供Android的行为活动。
这里提供了大量的影子对象,不过不可能全部覆盖,而是一步步改善。因此,你应该把它当做一个不断演进的开源工程,你也可以对它进行改进。不过,要用这个东西也要小心,因为你会发现你想用的一些功能可能还没实现。不过,即使这样,也不能掩盖它未来的光芒。
10.7.1 安装Robolectric
Robolectric可以在Maven中心文档(http://repol.maven.org.maven2/com/pivotallabs/robolectric/)
中下载robolectric-<version>-jar-with-dependencies.jar来完成安装。在写这本书的时候,最新可下载的版本是robolectric-0.9.8-jar-with-dependencies.jar,下面也是基于这个版本来举例的。
你还可以很方便地下载相应的Javadoc,把它放到工程属性的库中,因此你可以从Eclipse里打开文档。
10.7.2 新建一个JAVA工程
为了保持组织结构一致,我们跟前面章节一样,新建一个java工程。这次我们会加入下面的库。
" Robolectric-<version>-jar-with-dependencies.jar。
" AndroidSDK中的Android.jar。
" AndroidSDK中的maps.jar包。注意这是安装SDK时,选择性安装的包。
" Junit 4.
10.7.3 编写一些测试用例
我们再重写几个之前的用例来熟悉Robolectric的用法。
EditNumber的测试用例是重写的一个好例子。我们先新建一个EditNumberTests类,这次是在新建的工程中,然后把TemperatureConverterTest工程中的EditNumberTests文件拷贝过来,如框10.26所示。
框10.26
package com.example.aatg.tc.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import com.example.aatg.tc.EditNumber; import com.xtremelabs.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class EditNumberTests { private static final double DELTA = 0.00001d; private EditNumber mEditNumber; |
在前面的代码片段,我们定义了包。在这个用例中,我们这里还是跟之前一样,定义为com.example.aatg.tc.test。用@RunWith标签来声明测试执行器。接下来,定义mEditNumber字段来保存EditNumber的值,如框10.27所示。
框10.27
@Before public void setUp() throws Exception { mEditNumber = new EditNumber(null); mEditNumber.setFocusable(true); } @After public void tearDown() throws Exception { } @Test public final void testPreconditions() { assertNotNull(mEditNumber); } /** * Test method for {@link com.example.aatg.tc.EditNumber# EditNumber(android.content.Context, AttributeSet attrs, int defStyle)}. */ @Test public final void testEditNumberContextAttributeSetInt() { final EditNumber e = new EditNumber(null, null, -1); assertNotNull(e); } |
这段代码包含了平常的setup()和tearDown()方法,接着是testPreconditions()测试。在setUp()方法中,我们新建一个EditNumber变量,初始化是null值,然后将焦点设置在EditNumber上面,如框10.28所示。
本文选自《Android应用测试指南》第十章,本站经人民邮电出版社和作者的授权。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。