我想模拟System.Diagnostics.Process.Start调用,所以我为System Assembly 添加了一个 Fakes Assembly。
问题是Start是System.Diagnostics.Process上的一个静态方法,所以我没有得到一个 shim 来支持 Start 方法的委托。
这样做的正确方法是什么?
我想模拟System.Diagnostics.Process.Start调用,所以我为System Assembly 添加了一个 Fakes Assembly。
问题是Start是System.Diagnostics.Process上的一个静态方法,所以我没有得到一个 shim 来支持 Start 方法的委托。
这样做的正确方法是什么?
所以首先你需要为 Process 类生成 Shim。
在您创建 Fakes for System 后,您应该会看到一个名为“Fakes”的文件夹。在该文件夹中,您需要编辑 System.fakes 文件,以便它为 System.Diagnostics.Process 生成垫片:
<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="true">
<Assembly Name="System" Version="4.0.0.0"/>
<ShimGeneration>
<Add FullName="System.Diagnostics.Process"/>
</ShimGeneration>
</Fakes>
编译后,您将能够在 Object Explorer 中看到 Fakes Shim for Process 已生成。
要在测试中使用 Shim,您需要配置 Fake Process.Start 委托。测试可能最终看起来像这样:
using (ShimsContext.Create())
{
System.Diagnostics.Fakes.ShimProcess.StartString = s =>
{
Console.WriteLine(s);
return new StubProcess();
};
// A call to your method under test that exectues Process.Start rather than calling it directly
var process = Process.Start("SomeString");
Assert.IsTrue(process is StubProcess);
}
显然,您可能希望在委托和断言中包含与您的场景测试更相关的内容。
请参阅MSDN 链接
您可以使用匿名委托
()=> Process.Start("your.exe");
例如
class Program
{
static void Main(string[] args)
{
RunnerClass runner = new RunnerClass();
runner.runProgram += (exeFile) => Process.Start("your.exe");
string runApp = "run.exe";
runner.runProgram(runApp);
}
}
public class RunnerClass
{
public Action<string> runProgram;
}