首页 > 解决方案 > 使用 Pester 5 和 PowerShell 7 模拟类函数

问题描述

有没有人有使用 Pester 5 和 PowerShell 7 模拟点源类函数的示例?

谢谢你。

编辑:示例

类\MyClass.ps1:

class MyClass {
    [void] Run() {
        Write-Host "Class: Invoking run..."
    }
}

我的模块.psm1:

# Import classes
. '.\Classes\MyClass.ps1'

# Instantiate classes
$MyClass = [MyClass]::new()

# Call class function
$MyClass.Run()

标签: powershellpester

解决方案


Pester 只模拟命令——而不是类或它们的方法。

为方法分派测试“模拟”PowerShell 类的最简单方法是利用 PowerShell 标记所有方法这一事实virtual,从而允许派生类覆盖它们:

class MockedClass : MyClass
{
  Run() { Write-host "Invoking mocked Run()"}
}

这种方法的好处是约束输入到MyClass类型的函数仍然适用于模拟类型:

function Invoke-Run
{
  param([MyClass]$Instance)

  $instance.Run()
}

$mocked = [MockedClass]::new()
Invoke-Run -Instance $mocked    # this still works because [MockedClass] derives from [MyClass]

推荐阅读