繁体   English   中英

Pester ParameterFilter与Assert-MockCalled不匹配

[英]Pester ParameterFilter not matched by Assert-MockCalled

我们正在尝试检查CmdLet Start-ScheduledTask是否已针对特定的计划任务恰好被调用一次。 但是由于一个或另一个原因, ParameterFilter不匹配。

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'

Function New-TaskObjectsHC {
    Param (
        [Parameter(Mandatory, ValueFromPipeline)]
        [HashTable[]]$Hash
    )

    Process {
        foreach ($H in $Hash) {
            $Obj = New-Object -TypeName 'Microsoft.Management.Infrastructure.CimInstance' -ArgumentList @('MSFT_ScheduledTask')                                                                                                        
            $H.GetEnumerator() | ForEach-Object {
                $Obj.CimInstanceProperties.Add([Microsoft.Management.Infrastructure.CimProperty]::Create($_.Key,$_.Value, [Microsoft.Management.Infrastructure.CimFlags]::None))  
            }
            $Obj
        }
    }
}

Describe 'Monitor sheduled tasks' {
     it 'test' {
        Mock Get-ScheduledTask {
            @(
                @{
                    TaskName = 'My task'
                    State    = 'Running'
                }
            ) | New-TaskObjectsHC
        }
        Mock Start-ScheduledTask

        Start-ScheduledTask -InputObject (Get-ScheduledTask)

        Assert-MockCalled Start-ScheduledTask -Scope it -Times 1 -ParameterFilter {
            ($TaskName -eq 'My task')
        }
    }
}

当我们放下ParameterFilter我们可以清楚地看到CmdLet已被调用一次。 因此,我认为过滤器中肯定有语法错误。

解决的问题:

Assert-MockCalled Start-ScheduledTask -Scope it -Times 1 -ParameterFilter {
    ($InputObject.TaskName -eq 'My task')
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM