Могу ли я использовать Pester для проверки / проверки командлетов без имен параметров? - PullRequest
1 голос
/ 10 апреля 2019

Я использую несколько скриптов Powershell с Advanced Installer 15.1, которые я хочу протестировать с помощью Pester. Advanced Installer предоставляет два командлета для доступа к переменным MSI из сценариев Powershell: AI_GetMsiProperty и AI_SetMsiProperty , которые я хотел бы использовать в своих модульных тестах. Проблема заключается в том, что стандартное использование этих командлетов происходит без указания параметров, например

AI_GetMsiProperty MYPROPERTY
AI_SetMsiProperty MYPROPERTY "Newvalue"
Возможности

Пестера Mocking позволяют использовать параметр ParameterFilter для возврата нескольких значений нескольким вызовам одного и того же макета на основе именованного параметра :

Mock Get-ChildItem { return @{FullName = "A_File.TXT"} } -ParameterFilter { $Path -and $Path.StartsWith($env:temp\1) }
Mock Get-ChildItem { return @{FullName = "B_File.TXT"} } -ParameterFilter { $Path -and $Path.StartsWith($env:temp\2) }
Mock Get-ChildItem { return @{FullName = "C_File.TXT"} } -ParameterFilter { $Path -and $Path.StartsWith($env:temp\3) }

Однако, поскольку AI_GetMsiProperty не использует именованные параметры, я не уверен, как имитировать множественные вызовы get или set на основе параметров.

Mock AI_GetMsiProperty { return "value1" } -ParameterFilter { ????? }
Mock AI_GetMsiProperty { return "value2" } -ParameterFilter { ????? }

Есть идеи, как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Скорее всего, это не может быть сделано, и это потому, что, как я знаю, упомянутые командлеты get и set msi properties являются своего рода псевдо-командлетами.Точнее, они не являются командлетами, специфичными для синтаксиса PowerShell, а специфичны для синтаксиса Advanced Installer и будут работать только во время установки пакета установки, созданного с помощью Advanced Installer.

Если вы попытаетесь запустить соответствующие командлеты внеустановить пакет, созданный с помощью Advanced Installer, PowerShell просто не сможет их интерпретировать.

1 голос
/ 10 апреля 2019

Если эти команды являются настоящими командлетами PowerShell, вы сможете использовать Get-Help с ними для определения имен позиционных параметров. Однако, если по другому ответу они не являются командлетами, то Mock не может использоваться непосредственно для них.

Возможный обходной путь в этом случае - заключить команды в Function, а затем Mock вместо этой функции:

Function Get-MsiProperty ($Property, $Value) {
    AI_GetMsiProperty $Property $Value
}

Пример макета:

Mock Get-MsiProperty -ParameterFilter { $Property -eq 'somevalue' }
...