我第一次尝试开发一个GUI应用程序(使用JavaFX和Oracle的JDK 8u25),我想要测试这个应用程序。
经过一番试验和错误后,我想出了一个类似于MVP的基本设计:
例如,对于Pane
"基类名称" Foo
,对于标识为myButton
的元素,其动作事件为myButtonWasClicked
,代码如下:
// JavaFX controller
public class FooUi
{
// Package private on purpose, so that the view can access it
@FXML
Button myButton;
@FXML
WhateverElement modifiableElement;
@FXML
public void myButtonWasClicked(final ActionEvent ignored)
{
presenter.processMyButtonWasClicked();
}
}
// View interface
public interface FooView
{
void updateSomethingOnGui();
}
// View implementation
public class DefaultFooView
implements FooView
{
@Override
public void updateSomethingOnGui();
{
modifiableElemnt.modifyInSomeWay();
}
}
// Presenter
public class FooPresenter
{
public void processButtonWasClicked()
{
// whatever housekeeping, then
view.updateSomethingOnGui();
}
}
现在,我的问题在于测试...不是我无法测试它,我可以而且那是主要观点:
public final class FooTest
{
private FooUi ui;
private FooView view;
private FooPresenter presenter;
@BeforeMethod
public void init()
{
// init ui, view, presenter with Mockito
}
@Test
public void testMyButtonWasClicked()
{
final InOrder inOrder = inOrder(presenter, view);
ui.myButtonWasClicked(mock(ActionEvent.class));
inOrder.verify(presenter).processMyButtonWasClicked();
inOrder.verify(view).updateSomethingOnGui();
inOrder.verifyNoMoreInteractions();
}
}
但要创建的类集很重。
我想做的是让Ui
类实现View
类,并且所有方法都继承自View
类和只有他们,被存根,例如:
doNothing().when(ui).updateSomethingOnGui();
但是,我想不必须手动执行此操作......这可能吗?