- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我试图了解我应该如何测试我的应用程序,我仍在学习 mockito
我也看到了 mockk
但无法使其工作,这个是我的Presenter
class MyPresenterImpl @Inject constructor(var myUseCase: MyUseCase) : MyContract.Presenter {
private var mView: MyContract.View? = null
private var disposable: Disposable? = null
override fun attachView(view: MyContract.View) {
this.mView = view
this.mView?.showProgressBar(true)
}
override fun loadResults() {
disposable = getList.execute()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ result ->
mView?.showProgressBar(false)
mView?.showResults(result)
},
{ error ->
mView?.showProgressBar(false)
mView?.showError(error.localizedMessage)
})
}
override fun rxJavaUnsuscribe() {
if (disposable != null && !disposable!!.isDisposed) {
disposable!!.dispose()
}
}
override fun detachView() {
this.mView = null
}
}
我应该如何测试这个演示者?我必须添加所有这些方法吗?
我试图用 mockito
来做,但我也可以使用 mockk
。
有些人告诉我,我必须用 Scheduler
做一些事情并使用 trampoline
之一,但我不清楚你们中的任何人能否提供示例或解释有一点吗?
最佳答案
如果我正确理解了您的问题,那么您正在尝试了解如何使用单元测试(使用 Mockito)实现完整的 MVP 模式。
我编写了一个示例代码(显示书籍列表的应用程序),它解释了一个基本的 MVP 实现与一个 JUnit 测试用例:https://github.com/harneev/AndroidMVPkt
让我们在这里谈谈类:
ViewContract.kt
- 定义引导哑 View 执行操作的方法的接口(interface)。ModelContract.kt
- 接口(interface)定义方法来获取数据(从数据库或从服务器),这些数据将被封装在实现类中。Presenter.kt
- 处理所有业务逻辑并通过作为参数注入(inject)的具体 View 和模型来编排此逻辑。Note: Presenter being a regular class and business logic orchestrator is dependent on both model and views. Some developers like to add
Presenter
reference toView
interface but it is cleaner this ways.
现在为这个 MVP 设计提供单元测试用例 (PresenterTest.kt
)。
I'm using mockito-kotlin as mocking framework for better kotlin support.
我在这个场景中只添加了一个名为 test if books are displayed
() 的测试用例,它模拟 ViewContract
和 ModelContract
并初始化演示者
。最后 Mockito.verify
方法验证 View 是否收到模型生成的书籍列表。
为了更好的单元测试用例,我总是将其分解为以下三个场景,解释如下:
// 1. given
how mocks will behave when their respective methods are called
// 2. when
when execution method is called
// 3. then
verify / assert if required action is performed
希望这会有所帮助。
关于android - 如何测试演示者 MVP Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56063035/
我相信 Presenter 是负责处理 MVP 应用程序导航方面的人。这是真的还是有异常(exception)? 最佳答案 我认为 View 是唯一负责屏幕导航的 View 。 Here我们对这个“A
我看到了两种实现“加载”反馈的基本方法(例如旋转加载图标): 在演示者中: void displayData() { display.startShowingLoadingIcon();
我有一个方法,用户可以搜索文章编号,如果它在数据库中可用,则文章编号绑定(bind)到 BindingList。现在我想让用户知道该文章是否在数据库中不可用。我该如何以正确的方式做到这一点? 只需将消
我们正在使用 gwt-presenter,但并不是一个特定于此的问题...... 我有一张包含用户的表格。当我在 View 中构建表格时(根据演示者提供的数据),我需要在行的末尾添加两个操作按钮(“编
请用一个简单的例子来描述MVP-Passive View和MVP-Supervising controller的区别。最好显示如何使用 mvp 技术(被动 View 和监督 Controller )绑
GWT 2.1 包含一个 MVP framework其中包括 Google 的 Ray Ryan 在 Google I/O 2009 上概述的 PlaceService 实现。 那个talk启发了一些
在Model-View-Presenter模式中,我们应该在哪里编写用户输入的验证。 最佳答案 Realm 特定的规则/验证应在模型中。您可以使用model.validate()来告知您是否违反规则。
当我们在面试的时候被问到谈谈你对MVC,MVP,MVVM的理解。我们该如何回答,下面我们将对这些模式进行总结。 一、web1.0时代 在web1.0时代,当时并没有前端这个概念,当时如果要开发一个项目
我正在寻找有关 GWT 架构的指南 - 何时使用自包含小部件与 MVP/事件/场所。 背景 阅读了 Google 文档并搜索了 Stackoverflow,gwt-examples 项目为这个问题提供
在地点更改时更新事件状态的最佳做法是什么?假设您有一个带有 View 的事件,该 View 显示类别列表和类别中的项目列表。如果选择了不同的类别,则应用程序会使用类别 ID 转到新位置。然后我只想刷新
在 GWT 中使用 MVP 时,您将如何使用表?例如,如果您有一个用户表,您的 View 看起来像这样吗? public interface MyDisplay{ HasValue users();
我有一个 GWT 应用程序,我正在将 GWT MVP 与地点/事件一起使用。 我的应用程序布局类似于 菜单 |内容 菜单和内容显示将动态变化,其中一个单独变化。我的意思是,当内容显示更改时,我不想更新
我正在使用 Windows 窗体实现 MVP 模式,我对当前的实现有疑问,因为我正试图将其融入更复杂的架构中。 现在我有一个带有属性的完全不可知的 View ,一个在构造函数中注入(inject) V
对所有 GWT 大师的问题。 我是 GWT 的新手,正在尝试了解编写 GWT 应用程序的最佳实践。我经历过"Large scale application development and MVP"基于
我最近一直试图从架构的角度来理解 MVP 架构中交互器和用例之间的关系。我的疑问是关于部件之间的通信以及符合 MVP 标准的内容。 问题是我见过很多相互矛盾的流程图。其中一些似乎每个演示者都有一个交互
我有一个具有 MVP 架构模式的应用程序。 现在,我正在尝试在我的应用程序中实现 Livedata。 我搜索了很多,但我找不到任何教程或示例。 所有教程都说实时数据适用于 MVVM 模式。 在 MVP
我有一个关于在使用 MVP 时如何处理演示者之间的通信的问题。假设我有两个 MVP-triads。一个是产品列表(Triad A),另一个是有关当前所选产品的一般信息(Triad B)。 我如何告诉
我主要具有 ASP.Net 背景,并具有一些 MVC 知识。我也做了一些 Silverlight 和 MVVM,但是我现在即将转向 Winforms,我对它的经验很少,所以我想知道如何处理 MVP。
我读了鲍勃叔叔的《整洁架构书》。我尝试实现简单的例子。我有这个图: 我不明白如何实现红线部分。例如,我有一个简单的网页: 我有 2 个按钮、一个已编辑的文本和一个标签。如果我按下发送到服务器按钮 -
我正在查看 MVP 的 google 示例,我看到 this作为 Activity 的 onCreate 中的最后一个语句: new TaskDetailPresenter(
我是一名优秀的程序员,十分优秀!