【发布时间】:2009-07-29 08:46:06
【问题描述】:
我正在重构一个类,以便代码是可测试的(使用 NUnit 和 RhinoMocks 作为测试和隔离框架)并发现我发现自己的方法依赖于另一个方法(即它依赖于由其他方法)。类似于以下内容:
public class Impersonator
{
private ImpersonationContext _context;
public void Impersonate()
{
...
_context = GetContext();
...
}
public void UndoImpersonation()
{
if (_context != null)
_someDepend.Undo();
}
}
这意味着要测试UndoImpersonation,我需要通过调用Impersonate 来设置它(Impersonate 已经有几个单元测试来验证它的行为)。这对我来说很难闻,但从某种意义上说,从调用此类的代码的角度来看,这是有道理的:
public void ExerciseClassToTest(Impersonator c)
{
try
{
if (NeedImpersonation())
{
c.Impersonate();
}
...
}
finally
{
c.UndoImpersonation();
}
}
如果我不尝试为UndoImpersonation 编写单元测试并发现自己必须通过调用其他公共方法来设置测试,我就不会解决这个问题。那么,这是一种难闻的气味吗?如果是,我该如何解决?
【问题讨论】:
-
顺便说一句,这显示了单元测试的一个重要方面(?) - 好处:它让你思考你的设计...... :-)
标签: c# unit-testing tdd