powershell - 使用 Pester 模拟 Backup-DbaDatabase 不起作用
问题描述
我创建了一个使用 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
}
}
}
任何帮助,将不胜感激。谢谢,
解决方案
推荐阅读
- iis - URL 重写在 IIS10 中不可见
- go - 无法将 POST 正文绑定到 Go 中的 URL
- amazon-web-services - 无论如何我可以修改get-login-password令牌的到期时间吗?
- python - 使用 for 循环在符号中显示字符串值
- typescript - 如何让 Svelte 了解自定义 *.d.ts 文件?
- php - 网站在 PHP 中时如何调整 HTML
- python - 我的加密代码找不到文件“FileNotFoundError: [Errno 2] No such file or directory: file”
- javascript - 使用 AMP.goBack 和 AMP.pushState 在 AMP 页面中处理历史记录
- php - Symfony 4.4 - 返回我的用户(getUser())的 JSON 响应,但我只 GET NULL:安全问题?
- python - 如何在同一模板中传递另一个模型的列表视图和另一个模型的详细视图