首页 > 解决方案 > 使用 Pester 模拟 Backup-DbaDatabase 不起作用

问题描述

我创建了一个使用 DBATools 模块中的 Backup-DBADatabase 的 Powershell 函数。它有一些额外的逻辑来创建一个框架,供其他人在公司内一致使用。因此,我想使用 Pester 模拟 Backup-DBADatabase 并在函数中测试我的其他逻辑。

我有两个让我困惑的问题。

  1. 当我说“Mock -CommandName Test-Path { $False }”时,我的“Assert-VerifiableMock”仍然通过。如果我正确理解测试,它应该会失败

  2. 在此示例中,Backup-DBADatabase 仍在执行中。

    Import-Module DBATools
    Function Backup-DBTemplate {
        [CmdletBinding(SupportsShouldProcess=$true)]
        Param (
            [Parameter(valueFromPipeline)]
                [string]$ServerInstance,
            [string]$DatabaseName,
            [string]$BackupDirectory
        )
        $FileExists = Test-Path "$BackupDirectory\$DatabaseName.bak" -Verbose:$VerbosePreference
    
        IF($FileExists ) {
            remove-item "$BackupDirectory\$DatabaseName.bak" -WhatIf:$WhatIfPreference -Verbose:$VerbosePreference
        }
        Backup-DbaDatabase -SqlInstance $ServerInstance -Path "$BackupDirectory" -Database $DatabaseName -FilePath "$DatabaseName.bak" -ReplaceInName -Checksum -CopyOnly -IgnoreFileChecks -WhatIf:$WhatIfPreference -Verbose:$VerbosePreference
    }
    describe -Tag 'DBATools' 'Backup-DBTemplate' {
    
        Context "BackupDirectory file Exists" {
            Mock -CommandName Remove-Item -Verifiable
            mock -CommandName Test-Path { $true }
            Mock -ModuleName 'DBATools' -CommandName 'Backup-DbaDatabase'
    
            It 'Remove Backup if it exists' {
                Backup-DBTemplate -ServerInstance localhost -DatabaseName DBname -BackupDirectory C:\temp
                Assert-VerifiableMock 
            }
        }
        
    }

任何帮助,将不胜感激。谢谢,

标签: powershellpesterdbatools

解决方案


推荐阅读