PowerShell:具有前/后块的Pester单元测试

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

 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块递增。这是输出:

  

上下文BeforeEach / AfterAll

     

->初始值为0

[+] value is 1 

[+] value is 2 

[+] value is 3 
     

->最终值为0

该变量被初始化为0,并且在任何It Block递增之前,该声明未失败。但是AfterAll块表示变量值是0,是初始值,而不是我期望的3。

为什么?

谢谢。

yc857622872 回答:PowerShell:具有前/后块的Pester单元测试

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

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"
        }
    }
}
本文链接:https://www.f2er.com/3144159.html

大家都在问