Pester InvokeVerifiable 验证特定模拟被调用

Pester InvokeVerifiable verify specific mock was called

我对使用模拟的 v5 纠缠方式有点吃力。谁能给我一个例子,我如何验证特定的模拟是通过 Should -InvokeVerifiable 调用的?还有我如何检查特定模拟是否被调用了 n 次。

我还查看了 Pester 文档 Should InvokeVeriable, but didn't find an answer. Here 我只找到了一个调用所有模拟的示例。

示例:

Describe "Describe " {

    BeforeAll {
        $localPsSession = New-PSSession -ComputerName "localhost"
        # Arrange
        Mock New-PSSession { $localPsSession } -Verifiable
        Mock Remove-PSSession -Verifiable 

        # Act -> fire the function we want to test
        ...
    }

    It "Verify that Remove-PSSession was called in Act phase" {
        # Here I want to check THAT only the Remove-PSSession mock was 
        # called and NOT the New-PSSession mock.
        # Additionally I want to check that Remove-PSSession was called e.g. 3 times
        Should -InvokeVerifiable 

    }
}

您可以使用 Should -Invoke -CommandName <command> 来验证特定模拟与您标记为可验证的所有模拟。然后,您还可以使用 -Times-Exactly 参数来指定您希望 Mock 被调用的次数。

为了让您的代码正常工作,您还需要将 'Act' 部分移到 It 中。下面的示例:

Describe "PSSession Tests" {

    BeforeAll {
        # Arrange
        Mock New-PSSession { } -Verifiable
        Mock Remove-PSSession { } -Verifiable 
    }

    
    It "Verify that New-PSSession was called" {
        # Act
        $localPsSession = New-PSSession -ComputerName "localhost"
        
        # Assert
        Should -Invoke -CommandName New-PSSession -Times 1

    }
}

请注意,我更改了测试,因此它是针对 New-PSSession 的,因为这是使用的 cmdlet。

仅供参考,还有 Assert-MockCalled 可以以类似的方式使用来验证是否调用了特定 Mock 以及调用了多少次。 Should 上的新参数取代了它,但 Assert-MockCalled 仍在 Pester v5 中,也可以使用。