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黑盒测试,具体的配置方法可参考本系列第七篇。