Я настраиваю модульные тесты для нашего сценария, который перезапустит Azure WebApps. При попытке имитировать Restart-AzureRmWebApp макет не вызывается, и иногда WebApp фактически перезапускается. Я использую Pester 4.8.1 и версию PowerShell PSVersion 5.1.17134.858
Пробовал использовать фильтры параметров, добавил возврат возврата New-Object Microsoft.Azure.Management.WebSites.Models.Site
Это код до того, как я начал и хочу обернуть код Pester перед переписыванием.
Функция
Function Restart-WebApp {
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true)][string]$WebAppName,
[Parameter(Mandatory=$true)][string]$ResourceGroupName
)
#restarting web app
{
Write-Output "Restarting web app: $WebAppName"
$null = Restart-AzureRmWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName -ErrorAction Stop
Write-Output "Checking status"
}
Тестовое задание
Describe "Restart Webapps Unit Tests" {
Context "Restart Webapps Unit Test" {
$WebApp = "our-webapp-dev-westus"
$Environment = 'dev'
# Get-ResourceGroup is our internal script to get the Resource Group Name
$rsg = Get-ResourceGroup -Environment $Environment
Mock -CommandName Restart-AzureRmWebApp {} #-ParameterFilter { $ResourceGroupName -eq $rsg -and $Name -eq $WebApp} {}#{ return New-Object Microsoft.Azure.Management.WebSites.Models.Site }
It "should restart Web App" {
Restart-WebApp -WebAppName $WebApp -ResourceGroupName $rsg
Assert-MockCalled -CommandName Restart-AzureRmWebApp
}
}
}
Результаты теста
Describing Restart Webapps Unit Tests
Context Restart Webapps Unit Test
[-] should restart Web App 327ms
at <ScriptBlock>, : line 20
20: Assert-MockCalled -CommandName Restart-AzureRmWebApp
Expected Restart-AzureRmWebApp to be called at least 1 times but was called 0 times
Tests completed in 472ms
Tests Passed: 0, Failed: 1, Skipped: 0, Pending: 0, Inconclusive: 0