如何在Process.Start上使用Microsoft Fakes Assemblies

Kla*_*ber 4 c# stub shim .net-assembly microsoft-fakes

我想模拟System.Diagnostics.Process.Start调用,所以我为系统程序集添加了一个Fakes Assembly.

问题是StartSystem.Diagnostics.Process上的一个静态方法,所以我没有得到一个垫片,能够在Start方法的委托上进行操作.

这样做的正确方法是什么?

Mar*_*tin 9

首先,您需要为Process类生成Shim.

在创建Fakes for System后,您应该会看到一个名为"Fakes"的文件夹.在该文件夹中,您需要编辑System.fakes文件,以便生成Shims for 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>
Run Code Online (Sandbox Code Playgroud)

在编译之后,您将能够在对象资源管理器中看到Fakes Shims 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);
}
Run Code Online (Sandbox Code Playgroud)

显然,您可能希望在委托和断言中包含与场景测试更相关的内容.

请参阅MSDN链接


pro*_*pow -1

您可以使用匿名委托

()=> Process.Start("your.exe");
Run Code Online (Sandbox Code Playgroud)

例如

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;
}    
Run Code Online (Sandbox Code Playgroud)