我正在学习使用 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/