0

我有一个这样的界面:

public interface IConfigManager {
    T GetSetting<T>();
}

在测试项目中,我为上面的 dll 添加了 fake,但不能为其编写 fake 方法。打开生成的代码,如下图:

public class StubIConfigManager : StubBase<IConfigManager>, IConfigManager
{
    // Summary:
    //     Sets stubs of GetSetting()
    public void GetSettingOf1<T>(FakesDelegates.Func<T> stub);
}

因为GetSettingOf1没有定义为委托,所以我可以使用 lambda 表达式来伪造。我怎么能伪造它?

4

1 回答 1

2

因为该方法是通用的,所以单个委托是不够的。一位代表不能同时是Func<string>Func<int>。您看到的方法允许您传入特定类型的委托,该委托可能存储在内部字典中(来自我尝试复制 Fakes 的存根行为)。

因此,只需将您通常分配给属性的委托传递给GetSettingOf1方法。这实际上只是一种允许泛型方法为任意数量的类型而不只是一个类型实现存根的方法。

例子:

var configManager = new StubIConfigManager();
configManager.GetSettingOf1(() => "TestString");
configManager.GetSettingOf1(() => 23);

var stringResult = configManager.GetSetting<string>();
var intResult = configManager.GetSetting<int>();

Assert.AreEqual("TestString", stringResult);
Assert.AreEqual(23, intResult);

显然,这个示例不是您应该编写的测试,因为 Fakes 可以工作,但它应该明白这一点。

于 2014-04-01T14:31:27.713 回答