51Testing软件测试论坛
标题:
单元测试之Presenter测试(2)
[打印本页]
作者:
lsekfe
时间:
2022-11-16 10:54
标题:
单元测试之Presenter测试(2)
[attach]144959[/attach]
如果绿了就成功了。(什么玩意? 绿..绿了?)
[attach]144960[/attach]
那这里对返回的参数进行修改,将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]
肯定无法通过。那么运行一下。
[attach]144962[/attach]
好的红了,看下这个提示信息Wanted but not invoked。这个意思使想要使用但是不被调用。
以上的例子就是
单元测试
的一个简单的例子了。
2.1、TTD测试驱动开发模式的单元测试
这里提到了TTD测试驱动开发,TTD测试驱动开发到底是个什么东东呢?
在开发之前,先编写测试代码,通过测试案例去编写功能代码。一开始测试案例由于没有功能代码都会无法运行通过,然后通过修改功能代码使测案例一个一个通过测试。
复制代码
如果这个功能用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