c# - 重构复杂的构造函数,调用“基础”某些级别的深度
问题描述
最后,我正在阅读很多关于遗留代码以及如何处理它的内容。我有一个示例项目,其中包含编写得很糟糕的代码,我想对其进行重构。
注意:没有适当的测试,所以我想先添加一些测试,以确保我不会因为重构而破坏任何东西,但我不知道如何测试它。
给定以下 ULM 图:
我想为 Manager 类中的方法编写一个 UT(注意:这些不显示在 ULM 中)。问题是 Manager 类需要一个继承了几个层次的 User 对象。
为简单起见,我并没有完全绘制出整个图,但我们假设“用户”对象的构造函数需要多个参数,并且所有这些参数都表示具有这样一个继承链的对象。我不允许使用 null,因为这些对象在继承级别的某个地方使用,并且当我使用“null”时会抛出“Null Exception”。
我想练习 TDD 以向 Manager 类添加更改,但因此,我首先需要能够构造一个“Manager”类。重构所有其余部分以仅制作 Manager 是不可接受的。
我知道一种技术,它将“用户”参数更改为接口,但是将接口用于“用户”感觉不对。
有什么建议吗?
解决方案
我认为最简单的解决方案是代理设计模式。您将需要创建一个 ProxyUser ,其中仅包含来自 User 的所需属性和方法(我的意思是只包含 Manager 使用的东西)。然后在您的单元测试中,您可以模拟该 ProxyUser。
public class Manager
{
public User User {get;set;}
public void DoSomething()
{
Console.WriteLine(User.Name);
}
}
public abstract class BaseUser
{
public virtual string Name {get;}
}
public class ProxyUser : BaseUser
{
private User _realUser;
public override string Name => _realUser.Name;
}
public class User : BaseUser
{
public override string Name {get;set;}
}
然后,在您的单元测试中,您模拟 BaseUser
推荐阅读
- mysql - 获取 MySQL 中每个组的前 N 行
- c++ - 为什么通过点时值没有变化
- react-native - 使用 expo 和三、js 渲染动画对象与 React Native
- reactjs - 如何选择样式组件并访问其属性(例如:offsetHeight)
- linux - 命令替换在通过 SSH 传递的脚本文本中不起作用
- r - Docker(HDFS、Spark、Shiny R)
- r - 如何找到一个词根的所有相关关键词?
- excel - 如何在获取每条记录的绝对值的同时从一列中获取值并移动到另一列?
- java - JUNIT 5 报告自动折叠
- html - HTML React JSX:在 React 组件返回渲染中获取两个图像以全屏渲染