我对 GwtMock 和单击处理程序有疑问。
在我的单元测试中,我有一个带有 ClickHandler 和 Button 的字段:
@GwtMock 私有 ClickHandler clickHandler;
我的 setUp 方法如下所示:
@Before
public void setUp() {
when(this.display.getClearButton()).thenReturn(this.button);
when(this.display.getChangeStatusButton()).thenReturn(this.button);
}
我的测试看起来像:
@Test
public void shouldClearFilterAfterClickClearFilterButton() {
// given
when(this.button.addClickHandler(any(ClickHandler.class))).thenAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock aInvocation) throws Throwable {
clickHandler = (ClickHandler) aInvocation.getArguments()[0];
return null;
}
});
this.presenter = new PresenterImpl(this.display, this.messages);
// when
clickHandler.onClick(clickEvent);
// then
this.presenter.asWidget();
}
我想测试的代码看起来像(我从构造函数调用这个方法):
private void addHandlers() {
this.display.getClearButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
clearFilter();
}
});
this.display.getChangeStatusButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
changeStatus();
}
});
}
问题是,当我运行单元测试时,我在按钮“ChangeStatus”上制作了一个点击事件,但我想在“Clear”按钮上制作一个点击事件
当我更改声明处理程序的顺序时有趣的是,我可以通过“清除”按钮调用代码
如何解决这个问题呢?如何在特定按钮上调用点击事件?