2

这可以做到吗?这是我正在测试的方法:

public void SaveAvatarToFileSystem()
{
  Directory.CreateDirectory(AvatarDirectory);
  _file.SaveAs(FormattedFileName);
}

在我的单元测试中,我正在使用 Rhino.Mocks 并且我想验证 _file.SaveAs() 是否被调用。我已经模拟了 _file(它是一个 HttpPostedFileBase 对象)并将其注入到该方法的类构造函数中。我想运行这个单元测试,但实际上并没有进行 Directory.CreateDirectory 调用。这可能吗?

4

3 回答 3

3

无法使用 Rhino Mocks 模拟静态方法

但是,可以这样做。Microsoft MolesTypeMock具有此功能。

我试过用 Moles,效果很好。它为您生成一个模拟程序集,您可以在运行时用委托替换静态方法。

于 2010-11-03T18:57:05.103 回答
2

使用 Rhino Mocks 模拟静态方法是不可能的。我要做的是在类中的“受保护的内部虚拟”方法中隔离静态方法。然后你可以做的是模拟“被测类”并模拟“CreateAvatarDirectory”方法。然后调用“SaveAvatarToFileSystem”方法并验证代码是否调用了您模拟的“CreateAvatarDirectory”方法。

这是一个非常方便的技巧,它允许您隔离被测类中的方法并断言它们被同一类中的其他方法调用。希望有帮助!

public void SaveAvatarToFileSystem()
{
    CreateAvatarDirectory();
    _file.SaveAs(FormattedFileName);
}

protected internal virtual void CreateAvatarDirectory()
{
    Directory.CreateDirectory(AvatarDirectory);
}
于 2010-11-03T20:44:54.877 回答
0

您可以为静态类编写或使用现有的包装器(在上述情况下,System.IO.Abstractions可能会有所帮助)。

于 2010-11-04T09:51:57.740 回答