这是一种模拟方式,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
作为结果。您可能还想添加您的测试文件已创建并具有您期望的值的后续(集成样式)测试。