Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Microsoft Fakes Assemblies on Process.Start

I would like to mock the System.Diagnostics.Process.Start call, so i added a Fakes Assembly for the System Assembly.

The problem is that Start is a static method on System.Diagnostics.Process so i'm not getting a shim to be able to hock on a delegate for the Start method.

What is the correct way of doing this?

like image 264
Klaus Stefan Gerber Avatar asked Dec 26 '22 21:12

Klaus Stefan Gerber


1 Answers

So first of all you need to generate the Shim for the Process class.

After you create the Fakes for System you should see a folder called 'Fakes'. Inside that folder you need to edit the System.fakes file so that it will generate the 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>

After compiling you will be able to see in Object Explorer that Fakes Shims for Process have been genereated.

To use the Shim in a test you need to configure the Fake Process.Start delegate. A test might end up looking something like this:

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

Obviously you might want to include something more relevant to your scenario test in your delegate and assertions.

See MSDN link

like image 146
Martin Avatar answered Jan 10 '23 04:01

Martin