首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从pester测试输出调试信息

从pester测试输出调试信息
EN

Stack Overflow用户
提问于 2021-04-17 00:17:45
回答 2查看 240关注 0票数 0

我正在用C#编写一个系统,它有很多功能需要测试。其中一个功能是一组用于管理我的系统的PowerShell自定义cmdlet。

我正在使用pester (v5)来测试我的cmdlet,并且对于我想要测试的许多场景会有很多测试用例。

我可以成功地使用pester,但我无法从测试中获得任何调试输出-只有测试报告。测试报告可以看到什么是通过和失败的,但如果我有一个失败,那么我希望能够输出结果,可以给我什么是错误的上下文。

我已经尝试了所有我能想到的PesterConfiguration的设置,但都没有用。

代码语言:javascript
复制
$PesterPreference = [PesterConfiguration]::Default
#$PesterPreference.Output.Verbosity = "Diagnostic"
$PesterPreference.Debug.WriteDebugMessages = $true
#$PesterPreference.Debug.WriteDebugMessagesFrom = "*"

例如,假设我有一个get-foo cmdlet,该cmdlet返回一个具有Thing属性的对象,该属性的值应为"Bar"

我可以编写一个pester测试来检查这一点,但我希望能够将返回的对象作为测试的一部分输出,以查看以下内容:

代码语言:javascript
复制
Name     Value
----     -----
Thing    Bar
Other    124
代码语言:javascript
复制
Describe '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之外重建测试设置和结构-这是一个痛苦的过程。

如果有人对如何获得我的输出有任何建议,我将不胜感激。

谢谢,

大卫

EN

回答 2

Stack Overflow用户

发布于 2021-04-17 00:52:31

答案似乎是在脚本中将$VerbosePreference=设置为“Continue

例如。

代码语言:javascript
复制
$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等。

票数 0
EN

Stack Overflow用户

发布于 2021-05-24 22:24:35

您可以使用通过-PassThru获得的结果对象来访问每个测试的StandardOutput。演示:

代码语言:javascript
复制
# 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}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67128782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档