Попытка имитировать Restart-AzureRMWebApp продолжает терпеть неудачу

Я настраиваю модульные тесты для нашего сценария, который перезапустит 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

person Dave Richardson    schedule 30.07.2019    source источник


Ответы (1)


Результаты моей пробежки:

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 = "webappname"
        $Environment = 'dev'
        # Get-ResourceGroup is our internal script to get the Resource Group Name
        $rsg = "rgname"

        Mock -CommandName Restart-WebApp {} #-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-WebApp
        }
    }
}

Результат:

Describing Restart Webapps Unit Tests
   Context Restart Webapps Unit Test
    [+] should restart Web App 4.56s

Я бы порекомендовал вам попробовать REST API для запуска, перезапуска и остановки служб приложений. По моему опыту, они довольно быстрые.

Остановить: https://docs.microsoft.com/en-us/rest/api/appservice/webapps/stop

Начало: https://docs.microsoft.com/en-us/rest/api/appservice/webapps/start

Перезагрузите: https://docs.microsoft.com/en-us/rest/api/appservice/webapps/restart

person Hitesh Kacholiya    schedule 30.07.2019