我正在用C#编写一个系统,它有很多功能需要测试。其中一个功能是一组用于管理我的系统的PowerShell自定义cmdlet。
我正在使用pester (v5)来测试我的cmdlet,并且对于我想要测试的许多场景会有很多测试用例。
我可以成功地使用pester,但我无法从测试中获得任何调试输出-只有测试报告。测试报告可以看到什么是通过和失败的,但如果我有一个失败,那么我希望能够输出结果,可以给我什么是错误的上下文。
我已经尝试了所有我能想到的PesterConfiguration的设置,但都没有用。
$PesterPreference = [PesterConfiguration]::Default
#$PesterPreference.Output.Verbosity = "Diagnostic"
$PesterPreference.Debug.WriteDebugMessages = $true
#$PesterPreference.Debug.WriteDebugMessagesFrom = "*"例如,假设我有一个get-foo cmdlet,该cmdlet返回一个具有Thing属性的对象,该属性的值应为"Bar"。
我可以编写一个pester测试来检查这一点,但我希望能够将返回的对象作为测试的一部分输出,以查看以下内容:
Name Value
---- -----
Thing Bar
Other 124Describe 'Test My CmdLet' {
It 'get-foo should return bar' {
$obj = get-foo
write-output $obj
$obj | Should -Not -BeNullOrEmpty
$obj.Thing | Should -Be "Bar"
}
}如果没有获得输出的能力,那么我不得不直接在PowerShell中在pester之外重建测试设置和结构-这是一个痛苦的过程。
如果有人对如何获得我的输出有任何建议,我将不胜感激。
谢谢,
大卫
发布于 2021-04-17 00:52:31
答案似乎是在脚本中将$VerbosePreference=设置为“Continue
例如。
$VerbosePreference = "Continue"
Describe 'Test My CmdLet' {
It 'get-foo should return bar' {
$obj = get-foo
$obj | out-string | write-verbose
$obj | Should -Not -BeNullOrEmpty
$obj.Thing | Should -Be "Bar"
}
}将如预期的那样转储$obj的详细信息。这也适用于$DebugPreference、$InformationPeference等。
发布于 2021-05-24 22:24:35
您可以使用通过-PassThru获得的结果对象来访问每个测试的StandardOutput。演示:
# Just using a container here to avoid creating a testfile
$container = New-PesterContainer -ScriptBlock {
Describe 'Test My CmdLet' {
It 'get-foo should return bar' {
function get-foo { 1..3 | % { "hello $_" } }
$obj = get-foo
write-output $obj
$obj | Should -Not -BeNullOrEmpty
}
}
}
$pesterResult = Invoke-Pester -Container $container -PassThru
$pesterResult.tests | Format-Table ExpandedPath, StandardOutput
ExpandedPath StandardOutput
------------ --------------
Test My CmdLet.get-foo should return bar {hello 1, hello 2, hello 3}https://stackoverflow.com/questions/67128782
复制相似问题