以前の回答、Microsoft のドキュメント、および私自身の実験に基づいて解決策をまとめました。TestMethod
また、実際にテストに使用する方法を示すために少し変更しました。注: この特定のコードはコンパイルしていないため、そのままでは機能しない場合は申し訳ありません。
[TestClass]
class TestClass
{
[TestMethod]
public void TestMethod()
{
using (ShimsContext.Create())
{
Child child = CreateShimChild("foo", "bar");
Assert.AreEqual("foo", child.address); // Should be true
Assert.AreEqual("bar", child.Name); // Should be true
}
}
private ShimChild CreateShimChild(string foo, string bar)
{
// Create ShimChild and make the property "address" return foo
ShimChild child = new ShimChild() { addressGet = () => foo };
// Here's the trick: Create a ShimParent (giving it the child)
// and make the property "Name" return bar;
new ShimParent(child) { NameGet = () => bar };
return child;
}
}
Name
返された子が「バー」を返す必要があることをどのように知っているのかわかりませんが、そうです! ご覧のとおり、ShimParent
どこでも保存する必要さえありません。プロパティの値を指定するためにのみ作成されName
ます。