我对佩斯特的嘲弄机制有疑问。我有一个脚本Script.ps1,我想测试。测试位于Script.Tests.ps1中。在Script.ps1中,我实现了以下功能:
function Start-Executable {
param([string]$Executable)
Start-Process $Executable
}为了测试目的,我想模拟Start-Process。Script.Tests.ps1包含以下测试。
BeforeAll{
. $PSScriptRoot/Script.ps1
}
Describe 'Start-Executable' {
Mock -CommandName 'Start-Process' -MockWith {return $null}
It 'Start-Process is called.'{
Start-Executable -Executable 'Test.exe'
Assert-MockCalled 'Start-Process'
}
}如果我执行测试,真正的Start-Process会抛出一个“Test.exe”无法找到的异常。如果我移动It块中的模拟,测试就通过了。我想在Describe块中添加模拟(或者在更多的测试正在编写时,在上下文块中),以使一个模拟覆盖一组测试。这有可能吗?我做错了什么?
发布于 2022-02-25 10:30:18
看起来你可能在使用Pester v5。因此,您的模拟需要位于BeforeAll或BeforeEach块中。
这应该是可行的:
BeforeAll{
. $PSScriptRoot/Script.ps1
}
Describe 'Start-Executable' {
BeforeAll {
Mock -CommandName 'Start-Process' -MockWith {return $null}
}
It 'Start-Process is called.'{
Start-Executable -Executable 'Test.exe'
Assert-MockCalled 'Start-Process'
}
}放置在外部描述正文中的所有代码,BeforeAll、BeforeEach、AfterAll、AfterEach将在发现期间运行,它的状态可能可用,也可能不可用于测试代码,请参阅“发现并运行”
- https://pester-docs.netlify.app/docs/migrations/breaking-changes-in-v5
https://stackoverflow.com/questions/71264244
复制相似问题