【问题标题】:How do I unit test a method containing a static method?如何对包含静态方法的方法进行单元测试?
【发布时间】:2010-11-03 18:49:54
【问题描述】:
这可以吗?这是我正在测试的方法:
public void SaveAvatarToFileSystem()
{
Directory.CreateDirectory(AvatarDirectory);
_file.SaveAs(FormattedFileName);
}
在我的单元测试中,我使用的是 Rhino.Mocks,我想验证 _file.SaveAs() 是否被调用。我已经模拟了 _file(它是一个 HttpPostedFileBase 对象)并将其注入到该方法的类构造函数中。我想运行这个单元测试,但实际上并没有进行 Directory.CreateDirectory 调用。这可能吗?
【问题讨论】:
标签:
c#
unit-testing
rhino-mocks
httppostedfilebase
【解决方案2】:
无法使用 Rhino Mocks 模拟静态方法。我要做的是在类中的“受保护的内部虚拟”方法中隔离静态方法。然后你可以做的是模拟“被测类”并模拟“CreateAvatarDirectory”方法。然后调用“SaveAvatarToFileSystem”方法并验证代码是否调用了您模拟的“CreateAvatarDirectory”方法。
这是一个非常方便的技巧,它允许您隔离被测类中的方法,并断言它们被同一类中的其他方法调用。希望对您有所帮助!
public void SaveAvatarToFileSystem()
{
CreateAvatarDirectory();
_file.SaveAs(FormattedFileName);
}
protected internal virtual void CreateAvatarDirectory()
{
Directory.CreateDirectory(AvatarDirectory);
}