我有一个接口,ILoader
我在其上定义了一个扩展方法CheckLoaderDatabaseConnection
:
//the extension method
public static class LoaderExtensions
{
public static void CheckLoaderDatabaseConnection(this ILoader loader)
{
//data access stuff
}
那里的所有文档都告诉我,当我想存根扩展方法时,我必须使用 shims,因为该方法是静态的并且不能存根。
没错,它在 Moq 中不起作用,因为我已经尝试过了。
但我可以在 Fakes 中存根接口:
var loader = new MyNamespace.Fakes.StubILoader() { };
在我的单元测试中,我将存根传递给我正在测试的具体实例的构造函数,当它到达这一行时:
loader.CheckLoaderDatabaseConnection();
它调用存根方法(什么都不做)并且工作正常。
为什么是这样?我肯定错过了什么。我根本不必在这里使用垫片(尽管我不能在最小起订量中存根它——当我尝试这样做时,现实世界的扩展被调用并且整个事情都爆炸了)