Android单元测试—MVP中的Presenter测试(2)

发表于:2022-11-16 09:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:AxeChen    来源:稀土掘金

  如果绿了就成功了。(什么玩意? 绿..绿了?)
  那这里对返回的参数进行修改,将code改为非0,这个逻辑在网络请求框架中的ResponseTransformer类中定义的,非0则请求失败。
          @Test
      public void loginSuccess() throws Exception {
          // 1、断言model.login的方法返回正确的Response数据
          when(model.login("123321","123321")).thenReturn(Observable.just(new Response<>(1,new JSONObject(),"")));
          // 2、Presenter执行登录逻辑
          presenter.login("123321","123321");
          // 3、预测回调给view层的方法是否被调用
          verify(view).loginSuccess();
      }
  按照实际逻辑,如果为非0就是登录失败,view层的loginSuccess()方法一定不会被调用,那么测试肯定无法通过。那么运行一下。
  好的红了,看下这个提示信息Wanted but not invoked。这个意思使想要使用但是不被调用。
  以上的例子就是单元测试的一个简单的例子了。
  2.1、TTD测试驱动开发模式的单元测试
  这里提到了TTD测试驱动开发,TTD测试驱动开发到底是个什么东东呢?
  在开发之前,先编写测试代码,通过测试案例去编写功能代码。一开始测试案例由于没有功能代码都会无法运行通过,然后通过修改功能代码使测案例一个一个通过测试。
  如果这个功能用TTD测试驱动开发去做如何做呢?
  ·首先Presenter中的login()方法不要写功能代码,让他是一个空的方法。
  · 然后新建Presenter测试类将测试案例都列举出来。
  · 编写测试案例的测试代码。
  · 根据测试代码去编写功能代码,使测试案例一个一个通过测试。
  3、可能会遇到的问题
  3.1、Android的api无法直接使用需要特殊处理
  在Presenter中一般只做逻辑操作,不做界面处理,所以很少会用到Android的API。但是这个不是绝对的。比如TextUtils做非空判断。如果不对这个做特殊处理,那么会报无法调用的错误。 
  解决方案:在TextUtils中新建一个包名一样的TextUtils类即可。
  3.2、Rxjava的线程测试处理,这里用到Rxjava可能会遇到
  这个需要将线程的改为Schedulers.trampoline()强制立即进行当前的任务。 
  3.3、静态类方法无法被Mock
  4、其他的测试
  单元测试不仅仅只Presenter测试,还有view层的测试和model层的测试。这里就不做说明啦,主要是没去做过view层和model层的测试,知道Presenter层的测试,其他的测试应该大同小异。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号