pester / Pester

Pester is the ubiquitous test and mock framework for PowerShell.
https://pester.dev/
Other
3.11k stars 473 forks source link

ParameterBindingException when mocking Get-Package #2213

Open nyanhp opened 2 years ago

nyanhp commented 2 years ago

Checklist

What is the issue?

Mocking Get-Package results in ParameterBindingException. Get-Package is a compiled cmdlet, so I would assume that Pester should be able to mock it (unlike what happens in https://github.com/pester/Pester/issues/619)

The error, as it appears:

[-] What.Is.Happening Here 66ms (65ms|1ms)
 ParameterBindingException: Parameter set cannot be resolved using the specified named parameters.
 at foo, <No file>:2
 at <ScriptBlock>, D:\tmp\bla.tests.ps1:15

Expected Behavior

The mock should be executed as expected and return "A Package" instead of throwing a ParameterBindingException

Steps To Reproduce

function foo {
    Get-Package -Name ThePackage
}
describe What {

    Context Is {
        BeforeAll {
            Mock -CommandName Get-Package -MockWith { return 'A Package' } -Verifiable -ParameterFilter { $Name -eq 'ThePackage' }
        }

        It 'Happening Here' {
            foo | Should -Be 'A Package'
        }

    }
}

Describe your environment

Pester version : 5.3.3 C:\Program Files\WindowsPowerShell\Modules\Pester\5.3.3\Pester.psm1 PowerShell version : 5.1.22000.653 OS version : Microsoft Windows NT 10.0.22000.0

Possible Solution?

No response

fflaten commented 2 years ago

Thanks for the report. The PackageManagement-module in general is unfortunately problematic due to it's use of dynamic parameters. See #2094

possibly related to #339

nyanhp commented 2 years ago

Thanks @fflaten I missed that issue when searching. I'll just create a function before my tests then and mock that instead :)