C# 如何在Process.Start上使用Microsoft Fakes程序集
我想模拟System.Diagnostics.Process.Start调用,因此我为系统程序集添加了一个伪程序集 问题是,启动是系统.诊断.过程上的一种静态方法,因此我无法获得一个垫片,以便能够针对启动方法对一名学员进行调整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) {
正确的方法是什么?您可以使用匿名委托
()=> 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);
}