纠缠测试,如果列表为空,则不运行测试



如果列表为空,我希望能够跳过测试。

一个非常简单的例子:

没有名字是-eq到"jens",因此$newlist将是空的,当然测试将失败,但是如果列表是空的,我如何防止它通过这个测试?

context {
BeforeAll{
$List = @(Harry, Hanne, Hans)
$newlist = @()

foreach ($name in $List) {
if (($name -eq "Jens")) {
$name += $newlist
}
}
}
It "The maximum name length is 10 characters" {
$newlist |ForEach-Object {$_.length | Should -BeIn (1..10) -Because "The maximum name length is 10 characters"}
}
}

失败信息:

Expected collection @(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) to contain 0, because The maximum name length is 10 characters, but it was not found.

您可以通过使用Set-ItResult来实现这一点,这是一个允许您强制执行特定结果的Pester cmdlet。例如:

Describe 'tests' {
context 'list with content' {
BeforeAll {
$List = @('Harry', 'Hanne', 'Hans')
$newlist = @()

foreach ($name in $List) {
if (($name -eq "Jens")) {
$newlist += $name
}
}
}

It "The maximum name length is 10 characters" {
if (-not $newlist) {
Set-ItResult -Skipped
}
else {
$newlist | ForEach-Object { $_.length | Should -BeIn (1..10) -Because "The maximum name length is 10 characters" }
}
}
}
}

请注意,在你的例子中有一个错误($newlist没有更新名称,你正在做相反的事情),我在上面纠正了,但是你的测试实际上并没有在这个例子中失败(在添加Set-ItResult逻辑之前)。我认为这是因为通过使用ForEach-Object与空数组作为输入,Should在其为空时永远不会执行,所以使用这种方法,您的测试将通过,因为它从不评估任何东西。

相关内容

  • 没有找到相关文章

最新更新