我有一个密封的单身人士Foo及其方法:
public string GetFolderPath(FooFolder folder)
{
IBoo boo = this.GetBoo();
return boo.GetFolderPath(folder);
}
并希望使用GetFolderPath方法为FindFile方法编写测试,如下所示:
[TestMethod]
public void FindFile()
{
string expectedPath = Path.Combine(Path.GetTempPath(), "TestPath");
using (ShimsContext.Create())
{
Fakes.ShimFoo.AllInstances.GetFolderPathFolder
= () => { return "C:\\...\\Temp"; };
}
string actualPath = WorkflowHelper.FindFile("TestPath");
Assert.AreEqual(expectedPath, actualPath);
}
问题是我收到以下编译错误:
委托不接受0参数
在一个类似的问题How to shim OpenFileDialog.ShowDialog method中,问题就这样解决了:
[TestMethod]
public void SomeTest()
{
using (var context = ShimsContext.Create())
{
Nullable<bool> b2 = true;
ShimCommonDialog.AllInstances.ShowDialog = (x) => b2;
var sut = new Sut();
var r = sut.SomeMethod();
Assert.IsTrue(r);
}
}
所以我尝试了同样的...根据GetFolderPath是一个带有1个参数的方法......
下一个问题是我收到以下编译错误:
委托不带1个参数
所以我的问题是:
是否有可能填补密封班级并特别是单身人士?如果是的话,我的错误是什么?
感谢您的期待
答案 0 :(得分:4)
请注意,ShimsContext
生命周期内分配的所有垫片将在ShimsContext
处置后销毁。
在您的示例中,您在绑定WorkflowHelper.FindFile
生命周期的使用块之外调用ShimsContext
,因此Foo.GetFolderPath
的填充定义不再有效并且调用FindFile将使用原始方法定义。
只需在using
块内移动您的方法调用即可:
using (ShimsContext.Create())
{
Fakes.ShimFoo.AllInstances.GetFolderPathFolder = ...; // your lambda expression
string actualPath = WorkflowHelper.FindFile("TestPath");
}
Assert.AreEqual(expectedPath, actualPath);