我编写了一个用于powershell的模块--包装命令行工具。
对于我的测试,我在BeforeAll中定义了一些变量。这些vars应该帮助给命令提供所需的参数,并检查它们是否符合预期的结果,f.i。
BeforeAll {
$PORead=@{
Name = "Paul"
Permission ="Read"
Inheritance = "ThisFolderSubfoldersAndFiles"
}
$POReadExp="-bla bla (bla:bla;fra:fra;tra:tra)"
}现在,我希望在it段中使用这些内容来填充函数并检查结果,例如:
It "checks result" -ForEach (
@{Param=$PORead;Expected=$POReadExp}
) {
$result=FunctionCall -Parameter1 $Param
$result | Should -Be $Expected
}注意:这实际上是没有工作代码--只是为了明确我想要什么。
问题是,$Param和$Expected是$null,因此$PORead和$POReadExp的当前值没有分配给$Param和$Expected。我很容易演示这个问题--在我的代码中,我在分配给$Param和$Expected的$Param哈希和$Expected中使用数组。
使用简单的字符串,没有问题,一切都很好。我可以使用纯文本,而不是使用som开关构造来将我的字符串与BeforeAll{}中的相应变量匹配,但我认为肯定有一种更优雅的方法。
使用标准哈希表,变量substition可以正常工作。
任何想法我都会感激的。
为了澄清一些事情:
Mark的解决方案在某种程度上是可行的,但是它需要将$PORead和$POReadExp设置在BeforeAll-块之外(如果您想使用-ForEach),或者在BeforeAll-块中设置,但是在这种情况下,您只能使用一个参数。
我的计划有点不同,所以我想说得更清楚一点:
在前面的块中,我想要一堆对参数和结果的定义。
BeforeAll {
$PORead = @{
Name = "Paul"
Permission ="Read"
Inheritance = "ThisFolderSubfoldersAndFiles"
$PODelete = @{
Name = "Paul"
Permission ="Delete"
Inheritance = "ThisFolderOnly"
}
$POReadResult = "add parameters"
$PODeleteResult = "delete parameters"
}现在我想测试一大堆组合,将不同的组合添加到函数中,并检查结果的组合是否匹配:
It "Test if all combinations works" -ForEach(
@{FunctionParam=$PORead;Expected=$POReadExp}
@{FunctionParam=$PORead,$PORead;Expected=$POReadExp,$POReadExp}
@{FunctionParam=$PORead,$PODelete,$PORead,$PORead;Expected=$PORead,$PORead,$PORead,$PODelete}
) {
$result = Function-Call -Param $FunctionParam
$wanted = $expected -join(" ")
$result | Should -Be $wanted
}我可以通过将定义从任何块中排除出来来实现这一点,但在纠缠编码准则方面,我觉得这是错误的。
打招呼
发布于 2021-10-26 09:34:50
如何使用Pester v5设置测试数据的作用域非常混乱。我发现在BeforeAll或BeforeEach中设置的任何东西在It中都是可用的。但是,如果要将值设置为-ForEach (或别名-TestData),则需要将其设置为It的一部分或之前、BeforeEach或BeforeAll之外的值。
因此,我认为如果您这样做,您的测试将有效:
$PORead = @{
Name = "Paul"
Permission ="Read"
Inheritance = "ThisFolderSubfoldersAndFiles"
}
$POReadExp = "-bla bla (bla:bla;fra:fra;tra:tra)"
It "checks result" -ForEach (
@{Param=$PORead;Expected=$POReadExp}
) {
$result=FunctionCall -Parameter1 $Param
$result | Should -Be $Expected
}或者(如果您只需要执行一个测试):
BeforeAll {
$PORead=@{
Name = "Paul"
Permission ="Read"
Inheritance = "ThisFolderSubfoldersAndFiles"
}
$POReadExp="-bla bla (bla:bla;fra:fra;tra:tra)"
}
It "checks result" {
$result = FunctionCall -Parameter1 $PORead
$result | Should -Be $POReadExp
}如果您想避免使用一个不在Pester代码块中的变量,那么您应该这样做(这与数据驱动测试的纠缠文档中给出的示例一致):
It "checks result" -ForEach (
@{
Param = @{
Name = "Paul"
Permission = "Read"
Inheritance = "ThisFolderSubfoldersAndFiles"
}
Expected = "-bla bla (bla:bla;fra:fra;tra:tra)"
}) {
$result=FunctionCall -Parameter1 $Param
$result | Should -Be $Expected
}https://stackoverflow.com/questions/69719914
复制相似问题