PowerShell:使用前/后 block 纠缠单元测试

标签 powershell pester

我正在学习使用 Pester 进行单元测试,但我在使用 Before/After block 时遇到了一个奇怪的问题。我的单元测试代码如下:

 Describe "Before/After Blocks" {

        Context "BeforeEach/AfterAll" {

            BeforeAll {
                $value = 0
                Write-Host "->Initial value is $value"
            }

            BeforeEach {
                $value++
            }

            It "value is 1" {
                $value | Should -Be 1
            }

            It "value is 2" {
                $value | Should -Be 2
            }

            It "value is 3" {
                $value | Should -Be 3
            }

            AfterAll {
                Write-Host "->Final value is $value"
            }
        }
    }

好吧,正如您在代码中看到的那样,我的目的是初始化一个变量并查看它是如何通过 BeforeEach block 递增的。这是输出:

Context BeforeEach/AfterAll

->Initial value is 0

[+] value is 1 

[+] value is 2 

[+] value is 3 

->Final value is 0

变量被初始化为 0 并且在任何 It Block 之前它正在递增,因为断言没有失败。但是 AfterAll block 说变量值为 0,即初始值,而不是我预期的 3。

为什么?

谢谢。

最佳答案

问题似乎是 AfterAll block 有它自己的范围(我同意这有点奇怪)。您可以通过使用全局变量获得您期望的结果,尽管这不是特别好的做法:

Describe "Before/After Blocks" {

    Context "BeforeEach/AfterAll" {

        BeforeAll {
            $global:value = 0
            Write-Host "->Initial value is $value"
        }

        BeforeEach {
            $global:value++
        }

        It "value is 1" {
            $global:value | Should -Be 1
        }

        It "value is 2" {
            $global:value | Should -Be 2
        }

        It "value is 3" {
            $global:value | Should -Be 3
        }

        AfterAll {
            Write-Host "->Final value is $global:value"
        }
    }
}

关于PowerShell:使用前/后 block 纠缠单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58750616/

相关文章:

powershell - 测试字符串的最佳方法是什么?

unit-testing - Pester Mock 不适用于使用脚本 block 的 Invoke-Command

powershell - 如何为使用动态参数的高级函数 cmdlet 创建包装器

powershell - 如何在 Powershell 脚本中捕获返回值

C# '|' 运算符和参数

powershell - IF 语句检查数据集是否为空

PowerShell:如何删除名称以点开头的文件夹(例如 ".svn")

powershell - 有没有办法模拟美元?返回使用佩斯特?

unit-testing - 在 .ps1 脚本中模拟函数