【问题标题】:Unit Tests for Powershell SMO Restore ScriptsPowershell SMO 还原脚本的单元测试
【发布时间】:2012-11-20 18:07:32
【问题描述】:

我正在实施一组脚本来管理备份文件和恢复。脚本基于这篇文章:http://www.solidq.com/sqj/Documents/2010%20September%20Issue/SQJ_003_pag._30-41.pdf

我想围绕脚本开发单元测试。我有兴趣使用 PesterPSUnit 等框架

我的问题是我不明白我应该在测试中寻找什么。我是单元测试的新手,我读过的大部分内容都依赖于模拟文件,使用函数更改它们,并验证您是否可以从文件中读取您期望的值。

我将构建的函数以某种只读方式与一组备份文件进行交互。我的第一个倾向是创建一个包含几个文件的静态目录并将其与我的测试一起存储。由于代码只从文件中读取,因此测试目录将始终保持不变。

这需要将这些备份文件存储在我不喜欢的源代码管理中。我也不认为这符合单元测试的真正精神,但我不确定有更好的方法来做到这一点。任何建议将不胜感激。

【问题讨论】:

  • 您不需要将备份文件存储在源代码管理中。我创建的大多数数据库单元测试都依赖于您从头开始重新创建的本地数据库,每次运行。
  • 我的脚本使用备份文件而不是数据库——所以我必须从脚本创建数据库,然后创建大约 15-20 个备份来测试我的用例。这可能是正确的做法......

标签: sql-server powershell smo unit-testing


【解决方案1】:

我在 CodePlex 项目 SQL Server Powershell Extensions 的一些工作中使用了 PSUnit

查看源代码区域中的 PSUnit 测试脚本: http://sqlpsx.codeplex.com/SourceControl/changeset/view/ed45217f200e#Test%20Scripts%2fTest.SQLServer.ps1

Test.SQLServer.ps1脚本中有一个测试函数,用于测试invoke-sqlbackup函数:

##function Test.Invoke-SqlBackup([switch] $Skip)
function Test.Invoke-SqlBackup([switch] $Category_InvokeSql)
{
    #Arrange
    $server = get-sqlserver "$env:computername\sql2k8"
    #Act
    Invoke-SqlBackup "$env:computername\sql2k8" "pubs"  "$($server.BackupDirectory)\pubs.bak" -force
    $Actual = $?
    Write-Debug $Actual
    #Assert
    Assert-That -ActualValue $Actual -Constraint {$ActualValue}
}

对于任何基于 xUnit 的框架,您都将遵循安排、行动、断言。还可能有一个拆卸操作来执行清理后的任务。至于一般的单元测试,而不是专注于 PSUnit 或 Pester。阅读 xUnit/nUnit 框架概念。

【讨论】:

  • 查看了您的测试 - 看起来您正在使用一组已保存的备份文件来运行测试。我想我会暂时采用这种策略,并在以后将创建和备份脚本写入“组装”步骤。
猜你喜欢
  • 2020-02-25
  • 2021-04-29
  • 1970-01-01
  • 2010-11-01
  • 2010-11-23
  • 2019-08-06
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
相关资源
最近更新 更多