51Testing软件测试论坛

标题: 单元测试之Presenter测试(2) [打印本页]

作者: lsekfe    时间: 2022-11-16 10:54
标题: 单元测试之Presenter测试(2)
[attach]144959[/attach]
如果绿了就成功了。(什么玩意? 绿..绿了?)
[attach]144960[/attach]

 那这里对返回的参数进行修改,将code改为非0,这个逻辑在网络请求框架中的ResponseTransformer类中定义的,非0则请求失败。
  1. @Test
  2.       public void loginSuccess() throws Exception {
  3.           // 1、断言model.login的方法返回正确的Response数据
  4.           when(model.login("123321","123321")).thenReturn(Observable.just(new Response<>(1,new JSONObject(),"")));
  5.           // 2、Presenter执行登录逻辑
  6.           presenter.login("123321","123321");
  7.           // 3、预测回调给view层的方法是否被调用
  8.           verify(view).loginSuccess();
  9.       }
复制代码
按照实际逻辑,如果为非0就是登录失败,view层的loginSuccess()方法一定不会被调用,那么[url=]测试[/url]肯定无法通过。那么运行一下。


[attach]144962[/attach]
好的红了,看下这个提示信息Wanted but not invoked。这个意思使想要使用但是不被调用。
  以上的例子就是单元测试的一个简单的例子了。
  2.1、TTD测试驱动开发模式的单元测试
  这里提到了TTD测试驱动开发,TTD测试驱动开发到底是个什么东东呢?
  1. 在开发之前,先编写测试代码,通过测试案例去编写功能代码。一开始测试案例由于没有功能代码都会无法运行通过,然后通过修改功能代码使测案例一个一个通过测试。
复制代码
如果这个功能用TTD测试驱动开发去做如何做呢?
  ·首先Presenter中的login()方法不要写功能代码,让他是一个空的方法。
  · 然后新建Presenter测试类将测试案例都列举出来。
  · 编写测试案例的测试代码。
  · 根据测试代码去编写功能代码,使测试案例一个一个通过测试。
  3、可能会遇到的问题
  3.1、Android的api无法直接使用需要特殊处理
  在Presenter中一般只做逻辑操作,不做界面处理,所以很少会用到Android的API。但是这个不是绝对的。比如TextUtils做非空判断。如果不对这个做特殊处理,那么会报无法调用的错误。
  解决方案:在TextUtils中新建一个包名一样的TextUtils类即可。
[attach]144963[/attach]
3.2、Rxjava的线程测试处理,这里用到Rxjava可能会遇到
  这个需要将线程的改为Schedulers.trampoline()强制立即进行当前的任务。
  3.3、静态类方法无法被Mock
  4、其他的测试
  单元测试不仅仅只Presenter测试,还有view层的测试和model层的测试。这里就不做说明啦,主要是没去做过view层和model层的测试,知道Presenter层的测试,其他的测试应该大同小异。











欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2