gpt4 book ai didi

unit-testing - 在单元测试的角度来看 : should the view specify presenter or the other way around in GWT MVP?

转载 作者:行者123 更新时间:2023-12-04 04:50:07 25 4
gpt4 key购买 nike

在 GWT 教程中,Google 使用不同的方法来执行 MVP,View 指定 Presenter 或 Presenter 指定 View。第一个在使用 Activities 和 Places 时使用。

这篇文章涉及这个主题:MVP: Should the View implement a Presenter's interface or vice versa?

不过,我想知道在对演示者和 View 进行单元测试时,您认为哪种选择最好?还是两者效果一样好?

最佳答案

Presenter 单元测试背后的想法是模拟 View ,并针对这个模拟 View 的状态编写几个断言,这将在现实生活中的应用程序中以可视化方式表示。由于这种方法,不需要运行完整的 GWTTestCase,这会花费很多时间并且应该归入集成测试的范畴,而不是单元测试。

如果您尝试两种 MVP 方法,单元测试可能如下所示:

MVP 1:

@Test
public void shouldAddContactOnAddContactClicked() {
// given
ContactsPresenter.Display display = mock(ContactsPresenter.Display.class);
MockButton addButton = new MockButton();
given(display.getAddButton()).willReturn(addButton);
ContactsDisplay.Presenter presenter = new ContactsPresenter();
presenter.bindView(display);
presenter.setContacts(new ArrayList<Contact>());

// when
addButton.click();

// then
verify(display).addContact(any());
assertThat(presenter.getContacts().size(), is(1));
}

MockButton 是我在这里描述的内容: Comprehensive Pros/Cons of Mocking Frameworks for GWT

虽然可能,但以这种方式模拟事物并不是很方便。 MVP2 方法似乎表现更好:

@Test
public void shouldAddContactOnAddContactClicked() {
// given
ContactsView view = mock(ContactsView.class);
ContactsView.Presenter presenter = new ContactsPresenter();
presenter.bindView(view); // assuming that presenter will call view.setPresenter(this)
presenter.setContacts(new ArrayList<Contact>());

// when
presenter.onAddContactClicked();

// then
verify(view).addContact(any());
assertThat(presenter.getContacts().size(), is(1));
}

使用第二种方法的另一个原因是 MVP1 中声明显示元素的问题,这会触发不同的事件(例如 ClickEvent、FocusEvent)。当涉及到 UiBinder 时,MVP2 也让事情变得更简单。

关于unit-testing - 在单元测试的角度来看 : should the view specify presenter or the other way around in GWT MVP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com