我创建了一个使用 DBATools 模块中的 Backup-DBADatabase 的 Powershell 函数。它有一些额外的逻辑来创建一个框架,供其他人在公司内一致使用。因此,我想使用 Pester 模拟 Backup-DBADatabase 并在函数中测试我的其他逻辑。
我有两个让我困惑的问题。
当我说“Mock -CommandName Test-Path { $False }”时,我的“Assert-VerifiableMock”仍然通过。如果我正确理解测试,它应该会失败
在此示例中,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
}
}
}
任何帮助,将不胜感激。谢谢,