You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PowerShell哈希表键值对传入Pester的TestCases参数完成单元测试

问题修复方案

核心错误原因

  • 变量名引用错误:代码中BeforeAll块定义的预期值哈希表变量名为$Expected,但TestCases参数中错误调用了不存在的变量$Optional,导致无法读取键值对。
  • 变量作用域不匹配:BeforeAll块内定义的普通变量默认无法直接在It语句的参数区域访问,需要显式指定脚本作用域。

修正后可运行代码

BeforeAll {
  $script:Expected = @{
    Address1='Address1'
    Address2='Address2'
    City='City'
    RegionCode='RegionCode'
    PostalCode='PostalCode'
  }
}

BeforeEach {
  Mock Invoke-SqlCmd
  Invoke-MyFunction @Expected
}

It "sets the column '<Name>' with the value '<Value>'" -TestCases ( $script:Expected.GetEnumerator() | ForEach-Object { @{Name=$_.Key; Value=$_.Value} } ) {
    param($Name, $Value)
    
    $Test = "*{0}='{1}'*" -f $Name, $Value

    Assert-MockCalled Invoke-Sqlcmd -ParameterFilter {
        $Query -like $Test
    }
}

修改说明

  1. 在BeforeAll块定义$Expected时添加$script:前缀,或者在TestCases引用时加$script:前缀,两种方式都可以解决作用域问题,确保Pester能正常读取哈希表内容。
  2. 修正了TestCases数据源的变量名,替换为实际存在的$Expected。
  3. 转换逻辑保留原有写法,生成的每个哈希表键名和It语句的占位符<Name>、<Value>完全对应,符合Pester TestCases的参数传入规则。

额外注意

如果实际业务场景中值可能包含单引号,需要提前对$Value做单引号转义处理,避免-f格式化时生成的查询匹配字符串出错。

内容的提问来源于stack exchange,提问作者craig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:06:04