Robotium框架
Robotium是一个很常用的自动化测试框架,既可以进行白盒测试,也可以进行黑盒测试。Robotium实质上是建立在Instrumentation上的一系列工具方法。
由于Instrumentation通常不能获取系统权限(需要系统签名,而系统签名文件在编译系统时已经被编译进去,不能获取到),于是Robotium只能进行单个APP的测试,不能跨应用测试。
基于Rototium框架的测试
Robotium也是一款比较成熟的安卓测试框架,不仅可以进行白盒测试,也可以进行黑盒测试。只要能获取Activity和Instrumentation实例,即可使用Robotium。因此直接使用Instrumentation Test Runner即可。
相比Espresso,Robotium的配置简单很多,在gradle中只需要添加一个依赖项即可,基本上也不用担心冲突。
dependencies {
androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.1'
}
还是和Espresso同样的一个例子,点击按钮,并检查文本框中是否展示了预期的文本,代码如下。
-
public class MainActivityTest extends ActivityInstrumentationTestCase2 {
-
private Solo solo;
-
public MainActivityTest() {
-
super(MainActivity.class);
-
}
-
@Override
-
protected void setUp() throws Exception {
-
super.setUp();
-
solo = new Solo(getInstrumentation(), getActivity());
-
}
-
public void testHello() throws Exception {
-
// 等待Activity启动
-
solo.waitForActivity("MainActivity", 3000);
-
// findView
-
View button = solo.getView(R.id.button);
-
TextView text = (TextView) solo.getView(R.id.text);
-
// 点击按钮
-
solo.clickOnView(button);
-
// 延时
-
solo.sleep(100);
-
// 检查测试结果
-
assertEquals(solo.getString(R.string.hello_test), text.getText());
-
// 延时
-
solo.sleep(5000);
-
}
-
}
基于Robotium的黑盒测试
Robotium也可以用于黑盒测试,很多地方和前面的白盒测试写法类似;不同是,黑盒测试由于不能直接访问待测APP源码,所以会使用反射来访问。
白盒测试直接向父类构造函数传入Class对象获取Activity实例,黑盒测试则可以通过反射获取Activity的Class,对比如下。
-
public class MainActivityBaseTest extends ActivityInstrumentationTestCase2 {
-
public MainActivityBaseTest() {
-
super(com.jzj1993.unittest.MainActivity.class);
-
}
-
}
-
public class MainActivityBaseTest extends ActivityInstrumentationTestCase2 {
-
public MainActivityBaseTest() throws ClassNotFoundException {
-
super(Class.forName("com.jzj1993.unittest.MainActivity"));
-
}
-
}
在白盒测试中可以直接访问R.class从而取得资源,而黑盒测试则利用Context.getResources().getIdentifier()
,从字符串获取资源。示例代码分别如下。
-
solo.getView(com.jzj1993.unittest.R.id.text);
-
solo.getView("com.jzj1993.unittest:id/text");
黑盒测试时,在设备上安装待测APK,而测试代码在单独的工程中编译,最后添加和待测APK一致的签名,安装到设备上运行即可。
2016-5-11补充:在独立的工程中用Android Studio进行Robotium黑盒测试,具体的配置方法可参考本系列第七篇。