gpt4 book ai didi

java - 如何在不出现 GUI 的情况下对生成另一个 View 的演示者进行单元测试?

转载 作者:行者123 更新时间:2023-11-30 04:53:29 25 4
gpt4 key购买 nike

我有一个演示者类,它将在成功执行后生成一个新的演示者和 View 。在生成下一个演示者/ View 之前,执行一些我希望进行单元测试的业务逻辑。我的问题是,当我的单元测试执行时,我无法避免出现实际的 GUI 窗口。

这是一些演示该问题的伪代码:

// View1 and Model are interfaces
public Presenter1(View1 view, Model model) {
// ....
}


public void handleOKClick() {
// Method triggered by view

String data = view.getSomeUserInput();
// ... business logic I wish to test


if (shouldLoadNextView) {
// Business logic concluded the next view should be loaded

View2 nextView = new View2Impl();
Presenter2 nextPresenter = new Presenter2(nextView, model);
nextView.setPresenter(nextPresenter);
nextView.showView();
}
}

在我的单元测试中,我可以模拟传递给 Presenter1 构造函数的 View1Model 实例。然后我可以检查我的业务逻辑是否按预期与这些进行交互。我当前无法做的是阻止下一个 View 的显示,因为我的 Presenter1 实例将构造 View2 的具体实现并显示它。

我觉得我有三个选择:

  1. 改变我的类(class)设计。也许 Presenter1 构造函数应该采用 View2 实例作为参数,以便我可以出于测试目的模拟它。

  2. 找到一种巧妙的方法来杀死我的单元测试代码中的 View (一旦它出现)。我不确定如何最好地做到这一点。

  3. 对我的项目类设计进行更根本的更改,以便演示者永远不会以这种方式生成新 View 。

最佳答案

如果我是你,我会选择选项 3,让你的演示者通过事件与其他 View 进行通信,这样你就可以使它们保持松散耦合,并且演示者将变得更容易测试和更容易实现。

关于java - 如何在不出现 GUI 的情况下对生成另一个 View 的演示者进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331152/

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