使用Microsoft Fakes和静态通用方法填充

时间:2013-07-19 20:03:51

标签: unit-testing stub microsoft-fakes shim

我需要为单元测试提供静态泛型方法。但是,我似乎无法让Fakes创建填充对象。有谁知道如何做到这一点?

特别是,我想要填充Newtonsoft的JsonConvert.DeserializeObject<>()

1 个答案:

答案 0 :(得分:5)

对于您希望注册代理的每种返回类型,如下所示:

在单元测试中使用此代码:

using (var context = ShimsContext.Create())
{
    ShimJsonConvert.DeserializeObjectOf1String<SomeJSonObject>(s => new SomeJSonObject() { Name = "Foo" });

    SomeJSonObject o = ConsoleApplication3.Program.Deserialize();
    Assert.IsNotNull(o);
    Assert.AreSame(o.Name, "Foo");
}

此代码正在测试中:

return JsonConvert.DeserializeObject<SomeJSonObject>("");

它对我有效。

如果需要,还注册其他重载。因此,如果您正在使用其他一些重载,您还必须在Shim上注册相应的委托:

Other Overloads

像:

ShimJsonConvert.DeserializeObjectOf1String<SomeJSonObject>(s => new SomeJSonObject() { Name = "Foo" });
ShimJsonConvert.DeserializeObjectOf1StringJsonConverterArray((s, convertors) => new SomeJSonObject() {Name = "Bar"});
ShimJsonConvert.DeserializeObjectOf1StringJsonSerializerSettings((s, settings) => new SomeJSonObject() { Name = "Bar" });