考虑以下课程:
class Something : ISomething {
public void DoesSomething(int x) {
if (x == 0) {
x = 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我当然要删除神奇的数字 - 我的单元测试正在通过等...但我想重构可怕的魔法数字.
我正在使用C#,但我想这个问题非常通用.从配置文件(xml文件)读取是通过以下方式完成的:
ConfigurationManager.AppSettings["MyOldMagicNumber"]...
Run Code Online (Sandbox Code Playgroud)
当然,这将是一个测试的草皮.我可以轻松地在这个标记为虚拟的类中创建一个私有函数.其目的是封装上面的代码.这将允许我在我的单元测试中访问以覆盖和插入我自己的值.
我的问题是 -
这是不是我在做什么?见标题.
编辑:
这是一个游戏 - 因此很可能在开发过程中价值观会经常变化,重新构建将是一件苦差事.我应该提到的是,上面的代码是通用的,我这样做是为了让问题尽可能简单.虽然有点上下文 - '0'是游戏区域的界限.
提前致谢.
为什么不为此创建一个接口
public interface IApplicationSettings {
int MyOldMagicNumber { get; }
}
Run Code Online (Sandbox Code Playgroud)
然后有两个这样的实现,一个用于生产,从配置文件中读取,一个用于单元测试.
public class ApplicationSettings : IApplicationSettings {
public int MyOldMagicNumber {
get { return ConfigurationManager.AppSettings["MyOldMagicNumber"]; }
}
}
public class FakeApplicationSettings : IApplicationSettings {
public int MyOldMagicNumber {
get { return 87; /*Or whatever you want :) */ }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |