簡體   English   中英

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

[英]How to use Microsoft Fakes Assemblies on Process.Start

我想模擬System.Diagnostics.Process.Start調用,所以我為系統程序集添加了一個Fakes Assembly。

問題是StartSystem.Diagnostics.Process上的一個靜態方法,所以我沒有得到一個墊片能夠為Start方法的委托。

這樣做的正確方法是什么?

首先,您需要為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>

在編譯之后,您將能夠在對象資源管理器中看到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);
}

顯然,您可能希望在委托和斷言中包含與場景測試更相關的內容。

請參閱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;
}    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM