2016-06-20 4 views
3

Разработка сценария в PowerShell, мне нужно вызвать внешний исполняемый файл (.exe). В настоящее время я разрабатываю этот скрипт с использованием TDD-подхода, поэтому мне нужно издеваться над вызываемым в этот .exe-файл.Как издеваться над вызовом exe-файла с Pester?

Я стараюсь это:

Describe "Create-NewObject" { 
    Context "Create-Object" { 
     It "Runs" { 
      Mock '& "c:\temp\my.exe"' {return {$true}} 
      Create-Object| Should Be $true 
     } 
    } 
} 

Я получил этот ответ:

Describing Create-NewObject 
    Context Create-Object 
    [-] Runs 574ms 
     CommandNotFoundException: Could not find Command & "C:\temp\my.exe" 
     at Validate-Command, C:\Program Files\WindowsPowerShell\Modules\Pester\Functions\Mock.ps1: line 801 
     at Mock, C:\Program Files\WindowsPowerShell\Modules\Pester\Functions\Mock.ps1: line 168 
     at <ScriptBlock>, C:\T\Create-NewObject.tests.ps1: line 13 
Tests completed in 574ms 
Passed: 0 Failed: 1 Skipped: 0 Pending: 0 Inconclusive: 0 

Есть ли способ, чтобы дразнить такого рода звонков без инкапсуляции их внутри функции?

ответ

5

Я нашел способ поиздеваться вызов исполняемого файла:

function Create-Object 
{ 
    $exp = '& "C:\temp\my.exe"' 
    Invoke-Expression -Command $exp 
} 

И тест с издеваться должен выглядит как:

Describe "Create-NewObject" { 
    Context "Create-Object" { 
     It "Runs" { 
      Mock Invoke-Expression {return {$true}} -ParameterFilter {($Command -eq '& "C:\temp\my.exe"') 
      Create-Object| Should Be $true 
     } 
    } 
} 
+0

Не забудьте «принять» свой собственный ответ :) –