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 に答える