C# 如何在Process.Start上使用Microsoft Fakes程序集

C# 如何在Process.Start上使用Microsoft Fakes程序集,c#,.net-assembly,stub,microsoft-fakes,shim,C#,.net Assembly,Stub,Microsoft Fakes,Shim,我想模拟System.Diagnostics.Process.Start调用,因此我为系统程序集添加了一个伪程序集 问题是,启动是系统.诊断.过程上的一种静态方法,因此我无法获得一个垫片,以便能够针对启动方法对一名学员进行调整 正确的方法是什么?您可以使用匿名委托 ()=> Process.Start("your.exe"); 比如说 class Program { static void Main(string[] args) {

我想模拟System.Diagnostics.Process.Start调用,因此我为系统程序集添加了一个伪程序集

问题是,启动系统.诊断.过程上的一种静态方法,因此我无法获得一个垫片,以便能够针对启动方法对一名学员进行调整


正确的方法是什么?

您可以使用匿名委托

()=> 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;
}    
类程序
{
静态void Main(字符串[]参数)
{
RunnerClass runner=新RunnerClass();
runner.runProgram+=(exeFile)=>Process.Start(“您的.exe”);
字符串runApp=“run.exe”;
runner.runProgram(runApp);
}
}
公共类RunnerClass
{
公共行动计划;
}    

因此,首先需要为Process类生成垫片

为系统创建Fakes后,您应该会看到一个名为“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>
显然,您可能希望在委托和断言中包含与场景测试更相关的内容


请参见

很抱歉,没有收到您的回复。Fakes是用于单元测试的,所以我不知道如何模拟这个过程。使用您的建议开始方法。也许为了测试,您可以尝试包装过程。从方法开始?我想您理解我的问题是错误的。我想使用来自Microsoft的Fakes Assembly Framework来完成此工作,但在将其用于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);
}