繁体   English   中英

向现有的旧版 WinForm 添加演示者以添加单元测试?

[英]Adding A Presenter To An Existing Legacy WinForm To Add UnitTests?

在我的工作中,我们有一个使用 winforms 编写的大型遗留代码库。

遗留代码没有以任何形式的关注点分离编写,高度敏感和脆弱的业务逻辑与按钮单击事件、网格行事件等交织在一起。

我想开始在单元测试中引入其中的一些逻辑,以便让自己更好地理解逻辑,并(希望)允许未来以更大的信心和速度完成从 winforms 的迁移(这是 pipe 的梦想吗? )

为了开始添加单元测试,我知道 Michael Feather 的好书“使用遗留代码”以及在代码中引入允许测试的接缝的概念。 据我了解,这是通过引入可以注入 forms 的服务来执行 ui 层之外的业务逻辑来完成的。 对于业务逻辑来说,这似乎是一种很好的方法,但在我看来,它不适用于测试更普通的 ui 元素,例如基于某些用户操作设置用户控件的可见 state。

对于上面的示例,我想知道为旧版 winform 引入演示者 class 是否有意义,将用户交互传递给新创建的演示者,并让演示者执行正确的逻辑并通过视图设置视图 state -界面。 然后,这将允许我使用模拟视图界面对演示者的方法编写测试。

所以像下面这样

public class LegacyPresenter
{
  ILegacyView view;
  
  public void SetViewState(string value)
  {
    switch (value)
    {
      case "case 1":
        view.Button1Visible = true;
      case "case 2"
        view.Button1Visible = false;
    }
  }
}

public class LegacyView
{
  public LegacyPresenter Presenter;
  ...
  private void SomeEvent_Clicked()
  {
    this.Presenter.SetViewState("case 2");
  }
}

目前在我们的代码中,WinForm 中存在的上述“SetViewState”方法存在缺陷。 为这个遗留表单引入 Presenter class,将“SetViewState”从视图移动到新的 Presenter,然后针对 Presenter 编写单元测试是否有意义?

该表单目前是 4k 行代码,所以我现在只将这一种方法重构给演示者。 这是否有意义,或者我只是在遗留代码上浪费时间?

要回答您的问题,是的,创建部分实现是有意义的。 然后这是继续前进的起点。 当您需要对 View 进行更改时,或者如果您有时间,您可以将其他逻辑片段移至该 Presenter。 随着时间的推移,视图将变得越来越轻量级,您可以对 Presenter 的大部分部分进行单元测试。

随着你的进步,尽量保持你的 Presenter 干净(遵守基本的 SOLID 原则),这样你就不会得到一个只有 4k 行代码的 Presenter。 你如何做到这一点当然取决于你的代码。

但是,在这里,我想说的是,经过单元测试的 4k 行代码的 class 仍然比未经测试的 4k 行代码的 class 好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM