2013-09-04 5 views
3

Я хотел бы, чтобы дразнить System.Diagnostics.Process.Start вызов, поэтому я добавил Подделки ассамблею для системы Ассамблеи.Как использовать Microsoft Подделки сборки на Process.Start

Проблема заключается в том, что Start статический метод на System.Diagnostics.Process поэтому я не получаю шайбу, чтобы иметь возможность поддеть на делегат для метода Start.

Каков правильный способ сделать это?

ответ

-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; 
}  
+0

Извините, не получите ваш ответ. Подделки для модульного тестирования, поэтому я не вижу, как я могу издеваться над процессом Process.Start, используя вашу рекомендацию. –

+0

Может быть, для тестирования вы попробуете обернуть Process.Start при помощи метода? – progpow

+1

Я думаю, вы поняли мой вопрос неправильно. Я хотел бы использовать Faces Assembly Framework от Microsoft для этого задания, и у меня есть проблема с его использованием для метода Process.Start. Конечно, есть другие способы издеваться над этой функциональностью. –

8

Итак, прежде всего вам нужно сгенерировать Shim для класса процесса.

После создания подделок для системы вы должны увидеть папку под названием «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> 

После компиляции вы сможете увидеть в обозревателе объектов, которые Подделка Проставки для процесса есть были genereated.

Чтобы использовать 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