【问题标题】:How to use Microsoft Fakes Assemblies on Process.Start如何在 Process.Start 上使用 Microsoft Fakes 程序集
【发布时间】:2013-09-07 18:34:56
【问题描述】:

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

问题是 StartSystem.Diagnostics.Process 上的静态方法,所以我没有得到一个 shim 来为启动方法。

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

【问题讨论】:

    标签: c# .net-assembly stub microsoft-fakes shim


    【解决方案1】:

    你可以使用匿名委托

    ()=> 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;
    }    
    

    【讨论】:

    • 很抱歉没有得到您的回复。假货用于单元测试,所以我看不出如何使用您的建议模拟 Process.Start 方法。
    • 也许为了测试你尝试 wrap Process.Start at 方法?
    • 我认为你理解我的问题是错误的。我想使用 Microsoft 的 Fakes Assembly Framework 来完成这项工作,但在 Process.Start 方法中使用它时遇到问题。当然还有其他方法可以模拟这个功能。
    【解决方案2】:

    所以首先你需要为 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>
    

    编译后,您将能够在对象资源管理器中看到已生成 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 link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多