您的浏览器不支持CSS3,建议使用Firfox、Chrome等浏览器,以取得最佳显示效果

Android测试初探(三) 单元测试实例:基本的Android代码测试

Android, Android测试初探 776℃ 0 2年前 (2016-02-15)

Android Instrumentation Test

前面介绍了JUnit测试,JUnit测试只能测试纯Java代码,更多时候我们要测试和Android相关的代码,这时就要用到Android Instrumentation Test。

这里举一个最简单的例子,通过测试代码,让被测试APP弹一个Toast。

除了Java以外,弹Toast还需要三个和Android有关的条件:

  1. 访问Android Java API中的Toast接口。
  2. 需要一个Context对象。
  3. 在被测试APP的UI线程中执行show方法。

访问Android API是没有问题的,因为测试代码也是Android工程中的一部分。Context对象和UI线程,则需要利用Android测试相关的API了。

编写测试代码

这里使用的Test Runner还是默认的Instrumentation Test Runner。这个Test Runner提供了一系列测试接口,包括ActivityTestCase,ApplicationTestCase,InstrumentationTestCase,ActivityInstrumentationTestCase2(ActivityInstrumentationTestCase已弃用)等。

在androidTest目录下创建一个类,例如MainActivityTest,代码如下。

  1. public class MainActivityTest extends ActivityInstrumentationTestCase2 {
  2. public MainActivityTest() {
  3. super(MainActivity.class);
  4. }
  5. public void testShowToast() throws Throwable {
  6. final Context context = getActivity();
  7. runTestOnUiThread(new Runnable() {
  8. @Override
  9. public void run() {
  10. Toast.makeText(context, "Test !", Toast.LENGTH_LONG).show();
  11. }
  12. });
  13. Thread.sleep(5000);
  14. }
  15. }

测试代码和API说明

这个类继承自ActivityInstrumentationTestCase2,有一个没有参数的public构造方法,并在其中调用父类的构造方法,将MainActivity.class传入。运行时,MainActivity实例就会被Instrumentation创建。

在测试方法testShowToast中:

  • 通过getActivity()方法可以获取MainActivity实例,于是Context对象就有了。

  • 通过runTestOnUiThread可以在UI线程执行Runnable,从而可以弹出Toast。

  • 调用Thread.sleep(5000)延时5s,测试方法执行结束,APP就会退出。

  • 还可以通过getInstrumentation()方法获取Instrumentation对象,从而可以给APP发送用户操作事件。这里没用到。

要注意的是,getActivity()方法不能在UI线程的Runnable中执行,以及runTestOnUiThread和Thread.sleep方法都可能会抛出异常。

运行测试

编写完成后,运行这个测试类,就可以看到Android模拟器中MainActivity启动,弹出Toast,5s后APP退出,同时Android Studio中提示测试通过。

通过ActivityInstrumentationTestCase2等API,我们已经可以利用测试代码启动Activity、获取Context、调用待测试程序中的方法、获取Instrumentation从而发送用户事件等,从而进行很多安卓代码的单元测试了。

来自为知笔记(Wiz)

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

0

暂无评论

评论前:需填写以下信息,或 登录

用户登录

忘记密码?