4

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

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

4

1 回答 1

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 上注册它们相应的委托:

其他重载

像:

ShimJsonConvert.DeserializeObjectOf1String<SomeJSonObject>(s => new SomeJSonObject() { Name = "Foo" });
ShimJsonConvert.DeserializeObjectOf1StringJsonConverterArray((s, convertors) => new SomeJSonObject() {Name = "Bar"});
ShimJsonConvert.DeserializeObjectOf1StringJsonSerializerSettings((s, settings) => new SomeJSonObject() { Name = "Bar" });
于 2013-07-19T20:22:33.293 回答