模拟功能与纠缠不工作

Mocking functions with Pester not working

我的测试中有以下代码:

It "Set mock partitions"{
    Mock Get-Disk {
        return [PSCustomObject]@{
            SerialNumber = "SERIAL"
        }
    }
    Mock Get-Partition {
        param([PSCustomObject] $InputObject)
        return @([PSCustomObject]@{
            PartitionNumber = 1
        },[PSCustomObject]@{
            PartitionNumber = 2
        })
    }
    Custom-Function
}

在我的主脚本中,我有以下功能:

function Custom-Function(){
  $Disk = Get-Disk
  $Partition = Get-Partition -InputObject $Disk
}

当我 运行 测试时,我收到以下错误消息: 错误发生在调用 Get-Partition -InputObject $Disk 的行上。 我对 InputObject 参数的模拟定义有问题,还是我遗漏了什么?

错误是正确的,因为 Get-Partition cmdlet 没有 -InputObject 参数,尽管您向 Mock 添加了一个参数,但在 Pester 中无法访问它。 Pester 自动模拟参数。

我设法通过使用 CimInstance 构造函数创建预期对象 Get-Disk returns 然后将其作为输入发送到 -Disk 参数来获得一个工作示例:

Describe 'Tests' {

    BeforeAll {
        function Custom-Function() {
            $Disk = Get-Disk
            $Partition = Get-Partition -Disk $Disk
        }
    }

    It "Set mock partitions" {
        Mock Get-Disk {
            $Result = [Microsoft.Management.Infrastructure.CimInstance]::new('MSFT_Disk','root/Microsoft/Windows/Storage')
            $Result | Add-Member -Name SerialNumber -Value 'SERIAL' -MemberType NoteProperty
            Return $Result
        }

        Mock Get-Partition { 
            return @([PSCustomObject]@{
                    PartitionNumber = 1
                }, [PSCustomObject]@{
                    PartitionNumber = 2
                })
        }
        
        Custom-Function

        Assert-MockCalled Get-Disk
        Assert-MockCalled Get-Partition
    }
}

这个问题很有帮助:https://github.com/pester/Pester/issues/1944