powershell 纠缠和测试内部功能

vawmfj5a  于 2023-02-12  发布在  Shell
关注(0)|答案(1)|浏览(126)

在我的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.

我到底做错了什么?

dw1jzc5e

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上运行时,它使用的是最新版本。

相关问题