gpt4 book ai didi

powershell - 使用 Pester 测试 PowerShell 模块,我模拟的函数没有返回值

转载 作者:行者123 更新时间:2023-12-03 16:56:17 25 4
gpt4 key购买 nike

我正在使用 Pester,这是一个 PowerShell 测试库,可帮助实现 TDD/单元测试覆盖率。

我正在尝试模拟 Get-ChildItem 以用于我在模块中进行的测试,该模块应该执行我们的环境设置。如果我让我的模拟 Get-ChildItem 函数返回一个纯字符串,它工作正常,但如果我让它返回这个数组,它不会返回任何东西。

Describe "Get-HighestBuildNumber" {
Context "Get-ChildItem mocked to returns 12345, 12346, 12348, Foobar12349" {
$directory1 = New-Object -TypeName System.IO.DirectoryInfo -ArgumentList "12345"
$directory2 = New-Object -TypeName System.IO.DirectoryInfo -ArgumentList "12346"
$directory3 = New-Object -TypeName System.IO.DirectoryInfo -ArgumentList "12348"
$directory4 = New-Object -TypeName System.IO.DirectoryInfo -ArgumentList "Foobar12349"
$fakeListingOfDirectories = @( $directory1, $directory2, $directory3, $directory4 )
Mock -ModuleName EnvironmentSetup Get-ChildItem {
#return "this return text works" #this works
return $fakeListingOfDirectories #this return array does not work
}
it "should return 12348" {
Get-HighestBuildNumber -buildRoot "C:\my\test\directory" | Should Be "12348"
}
}
}

在被测代码中,我设置了一个断点并调用模拟的 Get-ChildItem 并且可以看出有什么不同。

当使用字符串 mock 调用它时 - 一切正常。

当使用数组 mock 调用它时 - 它不返回任何内容,甚至不返回文件和目录的标准列表..所以看起来 mock 正在做某事。

我想弄清楚为什么 Get-ChildItem 没有返回我的 DirectoryInfo 项目数组。

谢谢!

编辑:当我改变时:

Mock -ModuleName EnvironmentSetup Get-ChildItem { 
return $fakeListingOfDirectories #this return array does not work
}

返回一个不同的文字:

Mock Get-ChildItem -ModuleName NavEnvironmentSetup { return @{Name = "12345"}, @{Name = "12346" }, @{Name = "12348"}, @{Name = "Foobar12349"} } 

我的被测系统中的调用开始返回预期值,与返回纯字符串相同。

使用前导逗号不起作用,转换 Should Be 调用也不起作用。

最佳答案

如何转换为 System.IO.DirectoryInfo

Get-HighestBuildNumber -buildRoot "C:\my\test\directory" | Should Be @([System.IO.DirectoryInfo]"12348")

或使用“名称”属性

return $fakeListingOfDirectories.Name

?

关于powershell - 使用 Pester 测试 PowerShell 模块,我模拟的函数没有返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34168127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com