如何为这样的方法编写NUnit测试。这种方法本身是否需要重构? 在leagacy代码中处理这样的场景的最佳方法是什么?
public bool DoXYZ()
{
ABC abc= new ABC()
XYZ xyz = new XYZ();
if (xyz .IsSomeCondition(Session.SessionID))
{ return false; }
else
{ return abc.IsSomeOtherCondition(SessionID.SessionID); }
}
答案 0 :(得分:3)
您可能需要重构它以引入依赖注入的钩子。例如,包含DoXYZ方法的类可以获取ABC和XYZ的新属性。这些属性可以默认为ABC和XYZ的实例,但在单元测试中可以用模拟版本替换。
如果您更喜欢使用IoC,这种方法也支持
答案 1 :(得分:1)
我肯定会重构通过参数注入会话ID - 否则你必须手动创建会话。
可以静态吗?看起来像,特别是如果你注入sessionid。
此外,与IoC相比,您实现的(短)命令调度程序通常被认为是反模式(参见上面的Joel Martinez的回答)。
答案 2 :(得分:1)
您有两种选择:
使用大型遗留代码的方法可能是使用这两种方法。
您还可以从MSDN杂志中查看this article。
答案 3 :(得分:0)
鉴于问题中混淆了代码,我只能提供一些指示
public bool DoXYZ(ABC abc, XYZ xyz, Guid sessionId)
{ if (xyz.IsSomeCondition(sessionId))
return false;
return abc.IsSomeOtherCondition(sessionId);
}