2016-06-20 6 views
3

Um ein Skript in PowerShell zu entwickeln, muss ich eine externe ausführbare Datei (.exe) aufrufen. Derzeit entwickle ich dieses Skript mit einem TDD-Ansatz, daher muss ich die aufgerufene .exe-Datei vortäuschen.Wie spottet man einen Aufruf einer exe-Datei mit Pester?

Ich versuche dies:

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

ich diese Antwort bekam:

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 

Gibt es eine Möglichkeit, diese Art von Anrufen zu verspotten, ohne sie in einer Funktion kapseln?

Antwort

5

fand ich einen Weg, um den Anruf zu diesen ausführbaren Dateien zu verspotten:

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

und den Test mit dem Modell soll wie folgt aussieht:

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

Vergessen Sie nicht, „annehmen“, um Ihre eigenen Antworten :) –

Verwandte Themen