标签

Android 44

Android Network security configuration Android 网络配置 Android Camera Preview gradlew 源码分析 Android 动态修改菜单 Android RelativeLayout 之 Gravity 的使用 Android Studio Gradle Download Error Android加载子View 【转】Android打开与关闭软键盘 Android EditText软键盘显示隐藏以及“监听” Android mipmap文件夹 Android 用命令行更新SDK Android Service学习之AIDL, Parcelable和远程服务 Android 5.0设备中,Notification小图标是白色的 Android最佳实践 Android Keystore 文件的密码修改 Android Studio 中加载so库文件 Android 中方法重载遇到的问题 ListView & RecyclerView Google Volley如何缓存HTTP请求文件 Creating logs in Android applications Advanced Android TextView TextView高亮URL地址解析 TextView 高亮URL地址,并实现跳转 Best practices in Android development Android Sdk Manager无法更新问题解决办法 Android ViewPager滑动事件 Google Volley 网络请求框架(一) Andorid UI注入工具的使用(ButterKnife) Android 项目中出现的奇葩bug, 数据NullPointExcption Android Drawable Animation Android 图片的毛玻璃效果 Android之使用Log打印日志 使用Fidder来拦截Android发送的HTTP请求 Android之Webview使用 Android之Notification的使用(二) Android之Notification的使用(一) Android Keyboard Show&Hiden Android 粘贴板的使用 Android中使用.9.png 使用Fidder来拦截Android发送的HTTP请求 Andorid JUnit 单元测试 Activity之间的切换动画 Android ListView中Adapter的使用

Andorid JUnit 单元测试

2014年08月13日

Andorid JUnit单元测试

以前没怎么使用过单元测试,今天也自己写着试了一下,感觉还是相当不错的。有的时候确实要比在整个项目中做测试要快很多。 特别是在做模块测试的时候,JUnit是相当好用的。在这个地方记录一下,遇到的问题:

1. 创建Android测试项目

因为我自己使用的是Eclipse(Android Studio 还在研究当中),所以是新建的项目作为测试项目,步骤如下

  • 在菜单项点击菜单 File
  • 将鼠标移动到 New -> others…
  • 在弹出的菜单中找到 Android Test Project ,然后按照对应的步骤,选择你要测试的主项目就OK了
  • 在你要测试的类上面点击鼠标右键,新建 JUnit Test Case , 选择JUnit 3 TestSources Folder

2. 在测试方法中获取Context对象

其实很简单,就只需要将单元测试的类继承自AndroidTestCase就可以了,在使用的时候,直接用getContext()就可以了。

3. Android 多线程测试

因为JUnit测试是顺序执行的,所以说它不会等到你的异步回调回来就结束,返回正确的结果。google 了一翻,找到了解决方案,使用信号量来阻塞Test Case的执行,代码如下:

public void testRegister() {
    final CountDownLatch signal = new CountDownLatch(1); 
    RequestWraper registerRequest = new RequestWraper(RequestMethod.POST, 
             "http://192.168.0.106:8080/user/register");
    registerRequest.setCallbackListener(new StringRequestCallback() {
      @Override
      public void onSuccess(String result) {
        DebugLog.d(TAG, "[onSuccess] result:" + result);
        signal.countDown();
      }
      
      @Override
      public void onFailure(MallHttpException exp) {
        DebugLog.d(TAG, "[onFailure] exp:" + exp.getMessage());
        signal.countDown();
      }
    });
    Map<String, String> params = new HashMap<String, String>();
    params.put("device_id", PreferencesUtil.getString(getContext(), AlertmeConfig.PREFERENCE_JPUSH_REGISTID_KEY));
    registerRequest.setParameters(params);
    registerRequest.doExcute();
    try {
      signal.await();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }


友情链接: Hiro's Blog | Junjun's Blog