您好我是TDD的新手,只想开始探索。
我有一个用例" RegisterAccount"它将从用户那里获取一些注册信息(让它命名为#34; RegistrationInfo"),将其发送到服务器,获取成功状态并响应用户(成功,失败或连接问题)。
现在我从一个测试用例开始测试,当注册成功时,用例将通知UI显示成功的消息。所以我会:
verify(registrationPresenter, times(1)).showRegistrationSuccessed();
因为我想要的结果(BTW我使用Mockito来模拟对象)。同时,我将有一个注册信息对象,不会被嘲笑:
RegistrationInfo info = new RegistrationInfo(username, password, email);
和模拟的演示者一起注册服务类:
RegistrationPresenter registrationPresenter = Mockito.mock(RegistrationPresenter);
RegistrationService registrationService = Mockito.mock(RegistrationService.class);
现在,当我开始考虑将这3个部分连接在一起时,我不知道是否必须将此服务称为同步或异步。
任何理智的开发人员都知道我们不能在主线程中放置任何网络I / O来中断UI渲染,因此这个用例在某些时候需要转移到后台(线程,执行器,asynctask等等)。 )。
我的第一个问题是我是否应该将此用例设计为同步并让服务层处理异步调用?或者以异步方式设计用例本身?
第二个问题是,使用来自java并发实用程序(或任何其他方式)的回调或 FutureTask 来更好地实现异步方法吗?
提前谢谢。
答案 0 :(得分:0)
查看http://codelabs.developers.google.com/codelabs/android-testing/index.html
此处演示者实现"用例"逻辑和异步实现在存储库级别完成。
如果您应用干净/六角形拱形概念:
http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
存储库和交互器(用例实现)应用异步。 Presenter使用交互者并管理其事件。
如果您的演示者监听视图事件("处理视图异步")为什么不对用例/存储库事件做同样的事情"处理用例async"?
这个例子区分了回调实现:第一个定义并实现了自己的回调,第二个使用了subscriptor / observer和线程控制。
希望它可以帮到你!