首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纠缠式模拟CmdLets

纠缠式模拟CmdLets
EN

Stack Overflow用户
提问于 2022-02-25 10:12:07
回答 1查看 207关注 0票数 1

我对佩斯特的嘲弄机制有疑问。我有一个脚本Script.ps1,我想测试。测试位于Script.Tests.ps1中。在Script.ps1中,我实现了以下功能:

代码语言:javascript
复制
function Start-Executable {
    param([string]$Executable)

    Start-Process $Executable
}

为了测试目的,我想模拟Start-ProcessScript.Tests.ps1包含以下测试。

代码语言:javascript
复制
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块中添加模拟(或者在更多的测试正在编写时,在上下文块中),以使一个模拟覆盖一组测试。这有可能吗?我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-25 10:30:18

看起来你可能在使用Pester v5。因此,您的模拟需要位于BeforeAllBeforeEach块中。

这应该是可行的:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71264244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档