51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1708|回复: 0
打印 上一主题 下一主题

[原创] 单元测试之Presenter测试(2)

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:14
  • 签到天数: 938 天

    连续签到: 5 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-11-16 10:54:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    如果绿了就成功了。(什么玩意? 绿..绿了?)


     那这里对返回的参数进行修改,将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]肯定无法通过。那么运行一下。



    好的红了,看下这个提示信息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类即可。

    3.2、Rxjava的线程测试处理,这里用到Rxjava可能会遇到
      这个需要将线程的改为Schedulers.trampoline()强制立即进行当前的任务。
      3.3、静态类方法无法被Mock
      4、其他的测试
      单元测试不仅仅只Presenter测试,还有view层的测试和model层的测试。这里就不做说明啦,主要是没去做过view层和model层的测试,知道Presenter层的测试,其他的测试应该大同小异。






    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-27 07:30 , Processed in 0.067224 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表