我已经根据以前的答案、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
应该返回“bar”,但确实如此!如您所见,您甚至不需要保存ShimParent
任何位置;它只是为了指定Name
属性的值而创建的。