【问题标题】:Designing asynchronous methods in TDD在 TDD 中设计异步方法
【发布时间】:2016-03-18 10:34:46
【问题描述】:

您好,我是 TDD 新手,想开始探索。

我有一个用例“RegisterAccount”,它将从用户那里获取一些注册信息(我们将其命名为“RegistrationInfo”),将其发送到服务器,获取成功状态并响应用户(成功,失败,或连接问题)。

现在我从一个测试用例开始测试,当注册成功时,用例会通知 UI 显示成功消息。所以我会有:

verify(registrationPresenter, times(1)).showRegistrationSuccessed();

作为我想要的结果(顺便说一句,我使用 Mockito 来模拟对象)。同时,我会有一个注册信息对象,没有mock:

RegistrationInfo info = new RegistrationInfo(username, password, email);

和被模拟的presenter一起注册服务类:

RegistrationPresenter registrationPresenter = Mockito.mock(RegistrationPresenter);

RegistrationService registrationService = Mockito.mock(RegistrationService.class);

现在,当我开始考虑将这 3 个部分联系在一起时,我不知道是否必须使此服务调用 同步异步

任何理智的开发人员都知道,我们绝不能在主线程中放置任何网络 I/O 来中断 UI 渲染,因此这个用例在某些时候需要转移到后台(线程、执行程序、异步任务等,等等)。 )。

我的第一个问题是我是否应该将此用例设计为同步并让服务层处理异步调用?还是以异步方式设计用例本身?

第二个问题是使用 java 并发实用程序中的 callbackFutureTask (或任何其他方式)是否更好地实现异步方法?

提前谢谢你。

【问题讨论】:

    标签: java android unit-testing tdd


    【解决方案1】:

    看看http://codelabs.developers.google.com/codelabs/android-testing/index.html

    这里演示者实现“用例”逻辑,异步实现在存储库级别完成。

    如果你应用干净/六角拱的概念:

    http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

    存储库和交互器(用例实现)应用异步。 Presenter 使用交互器并管理其事件。

    如果您的演示者监听视图事件(“处理视图异步”),为什么不对用例/存储库事件和“处理用例异步”做同样的事情?

    这个例子有不同的回调实现:第一个定义并实现自己的回调,第二个使用下标/观察者和线程控制。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 2014-08-16
      • 1970-01-01
      相关资源
      最近更新 更多