単体テスト用に静的ジェネリック メソッドをシムする必要があります。ただし、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" });