TA的每日心情 | 无聊 昨天 09:05 |
---|
签到天数: 1050 天 连续签到: 1 天 [LV.10]测试总司令
|
如果绿了就成功了。(什么玩意? 绿..绿了?)
那这里对返回的参数进行修改,将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()方法一定不会被调用,那么[url=]测试[/url]肯定无法通过。那么运行一下。
好的红了,看下这个提示信息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层的测试,其他的测试应该大同小异。
|
|