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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With