我需要为单元测试填充一个静态通用方法。但是,我似乎无法让 Fakes 创建 shim 对象。有谁知道如何做到这一点?
特别是,我想填充 Newtonsoft 的 JsonConvert.DeserializeObject<>()
我需要为单元测试填充一个静态通用方法。但是,我似乎无法让 Fakes 创建 shim 对象。有谁知道如何做到这一点?
特别是,我想填充 Newtonsoft 的 JsonConvert.DeserializeObject<>()
对于您期望的每种返回类型,注册一个委托,如下所示:
在单元测试中使用此代码:
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" });