我在 Powershell 2.0 中使用 PSUnit 进行测试。因为我的测试需要连接到数据库服务器,所以我希望能够将服务器和数据库名称传递到测试脚本中。这将允许开发人员在本地计算机上使用本地数据库运行测试脚本,同时可以在服务器上运行它。数据库也可能根据环境而改变。
PSUnit.Run 脚本似乎不允许您在测试脚本名称中包含参数。我错过了什么吗?有解决方法吗?
谢谢!
我在 Powershell 2.0 中使用 PSUnit 进行测试。因为我的测试需要连接到数据库服务器,所以我希望能够将服务器和数据库名称传递到测试脚本中。这将允许开发人员在本地计算机上使用本地数据库运行测试脚本,同时可以在服务器上运行它。数据库也可能根据环境而改变。
PSUnit.Run 脚本似乎不允许您在测试脚本名称中包含参数。我错过了什么吗?有解决方法吗?
谢谢!
我能找到的唯一方法是在测试脚本的开头包含标签,然后搜索并替换正确的值来代替这些标签。例如,在我的情况下,我的测试脚本在脚本顶部包含以下代码:
[string]$ServerName=<ServerName>
[string]$TargetDatabaseName=<TargetDatabaseName>
那是文字代码。然后,在我调用测试的脚本中,我包含了以下代码:
foreach ($testPSScript in Get-ChildItem "$testScriptDir\*.ps1") {
(Get-Content $testPSScript.FullName) |
ForEach-Object {$_ -replace "<ServerName>", "'$ServerName'"} |
ForEach-Object {$_ -replace "<TargetDatabaseName>", "'$DatabaseName'"} |
Set-Content $testPSScript.FullName -Force
PSUnit.Run.ps1 -PSUnitTestFile "$testPSScript"
}
您必须记住每次都用原始版本覆盖您的测试脚本,否则它将包含您在上次运行中使用的值而不是标签,并且您将无法更改这些值。
为什么不在“profile.ps1”文件中包含 2 个变量 ( [string]$ServerName
& [string]$TargetDatabaseName
) 并在测试用例中使用它们。这些将在那里可用,您可以随时在 ps1 文件中配置它们。
这似乎比为此任务编写单独的脚本更容易和更直观。
只需将任何此类信息附加到 PowerShell 配置文件即可。