2

我正在尝试使用 Pester 测试我的 PowerShell 代码。我想模拟out-file以下行:

$interactiveContent | Out-File -Append -FilePath (Join-Path $destDir $interactiveOutputFile)

但是我想在测试时给出自己的文件路径。

我尝试了以下方法:

Mock Out-File {
    $destDir = 'c:\snmp_poc_powershell\'
    $interactiveOutputFile = 'abc.csv'  
}

但它不工作。

4

2 回答 2

4

这是一种模拟方式,Out-File以便在运行测试时写入不同的位置:

Describe 'Mocking out-file' {

    $outFile = Get-Command Out-File

    Mock Out-File { 
        $MockFilePath = '.\Test\Test.txt'
        & $outFile -InputObject $InputObject -FilePath $MockFilePath -Append:$Append -Force:$Force -NoClobber:$NoClobber -NoNewline:$NoNewline 
    }

    It 'Should mock out-file' {
        "Test" | Out-File -FilePath Real.txt -Append | Should Be $null
    }

}

在我在 Github 上将此作为问题提出后,此解决方案来自 Pester 的开发人员。我发现您不能直接从 Mock 中调用您正在模拟的 cmdlet,但他们建议您使用此解决方案Get-Command将 cmdlet 放入变量中,然后使用&它而不是直接调用 cmdlet。

根据另一个答案,Out-File不返回任何值,因此在 Pester 测试中,我们只是测试$null作为结果。您可能还想添加您的测试文件已创建并具有您期望的值的后续(集成样式)测试。

于 2017-04-24T10:28:14.633 回答
0

所以代码片段绝对是一个问题,你没有返回任何值,所以模拟只是空的,但是 out-file 从来没有真正返回任何开始的东西,所以我不确定你在模拟什么输出?除非您只是希望它假装输出到文件并移至管道中的下一个阶段,而您当前的代码会这样做(所以只会做Mock Out-File {}.

但是,如果您希望输出到不同的路径,为什么在为测试创建变量时不使用该路径而不用 Mock?

于 2016-11-15T17:33:53.657 回答