我受到文章Decouple the View and its behavior to create a testable UI的启发,想用MVVM pattern重写我的JavaFX应用程序。
理想情况下, View Model 应该 View -independent并且可以像通常的Java类一样进行测试。此外,MVVM使用 Command 构造来从View更改View Model。因此,Command实现是View Model实现的一部分,可以简单地进行测试。
问题是如果Command的结果是视图更改,应该如何实现Command?例如。在View_1中按下按钮后我会有一个按钮,应该创建并显示一个新视图(例如View_2)。这样的Command是否应该成为View的一部分而根本不可测试?
答案 0 :(得分:0)
我认为命令可以测试。我不确定你究竟要切换视图,但是JavaFX中的AFAIK就像场景和舞台一样是场景的父级,是吗?
因此,在您的命令中,您将舞台作为依赖项传递,并在执行时将其设置为新场景。
你可以在单元测试中轻松测试它 - 你可以模拟Stage并检查命令是否将正确的场景传递给它。
我不记得JavaFX的确切细节,但我会像这样实现它:
class SwitchSceneCommand {
protected Stage stage;
protected Scene originalScene; // you can keep original scene if you want to have some undo-redo functionality
protected Scene newScene;
public SwitchSceneCommand(Stage stage, Scene originalScene, Scene newScene)
{
this.stage = stage;
this.originalScene = originalScene;
this.newScene = newScene;
}
public void execute()
{
this.stage.setScene(this.newScene);
}
}