在我的Pester-test中,我创建了一个函数来测试SQLConnection,我可以像这样测试这个函数:
param(
[string]
$Server,
[string]
$Database
)
BeforeAll {
$testDbServer = $Server
$testDatabase = $Database
}
Describe "Status Databaseserver" {
It "Should login with integrated security" {
Test-SQLConnection "Data Source=$testDbServer; Database=$testDatabase;Integrated
Security=True"; | Should -BeTrue
}
}
function Test-SQLConnection
{
[OutputType([bool])]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
$ConnectionString
)
try
{
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection $ConnectionString;
$sqlConnection.Open();
$sqlConnection.Close();
return $true;
}
catch
{
return $false;
}
}
当我在计算机上本地运行测试时,此方法有效。但当我从Azure发布管道进行测试时,我收到此错误:
CommandNotFoundException: The term 'Test-SQLConnection' is not recognized as the name of a cmdlet, function, script file, or operable program.
我到底做错了什么?
1条答案
按热度按时间dw1jzc5e1#
根据注解,您的函数需要位于
BeforeAll
块中,因为在Pester v5和更新版本中,Pester现在会在执行测试之前执行“发现”阶段:所有代码现在都应放入It、BeforeAll、BeforeEach、AfterAll或AfterEach中。不要将代码直接放入Describe、Context或文件顶部而不将其 Package 在这些块中(除非有充分的理由)。
如果代码没有放在正确的位置,它将在发现中运行,并且结果在运行期间不可用。在运行阶段,将运行容器、块和测试的内部树。
-- https://www.sapien.com/blog/2021/01/20/migrating-from-pester-4-to-pester-5/
我怀疑发生在您身上的是您的本地计算机有一个旧版本的Pester,但当在Azure DevOps上运行时,它使用的是最新版本。