【问题标题】:Trying to mock Restart-AzureRMWebApp continues to fail尝试模拟 Restart-AzureRMWebApp 继续失败
【发布时间】:2019-07-31 07:15:35
【问题描述】:

我正在为将重新启动 Azure WebApps 的 out 脚本设置单元测试。尝试模拟 Restart-AzureRmWebApp 时,不会调用模拟,有时 WebApp 会实际重新启动。 我正在运行 Pester 4.8.1 和 PowerShell 版本 PSVersion 5.1.17134.858

我尝试使用参数过滤器,添加了 return 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

【问题讨论】:

    标签: azure powershell unit-testing mocking pester


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2014-12-19
      相关资源
      最近更新 更多