Вывод отладочной информации из теста приставания

Я пишу систему на C#, в которой есть много функций для тестирования. Одной из функций является набор пользовательских командлетов PowerShell для управления моей системой.

Я использую pester (v5) для тестирования своих командлетов, и у меня будет много тестовых случаев для множества сценариев, которые я хочу протестировать.

Я могу успешно использовать приставание, но я не могу получить какие-либо отладочные данные из тестов - только отчет о тестировании. В отчете о тестировании можно увидеть, что проходит, а что нет, но если у меня есть сбой, я хочу иметь возможность выводить результаты, которые могут дать мне контекст того, что идет не так.

Я перепробовал все настройки PesterConfiguration, которые только мог придумать, но безрезультатно, например.

$PesterPreference = [PesterConfiguration]::Default
#$PesterPreference.Output.Verbosity = "Diagnostic"
$PesterPreference.Debug.WriteDebugMessages = $true
#$PesterPreference.Debug.WriteDebugMessagesFrom = "*"

В качестве примера представьте, что у меня есть командлет get-foo, который возвращает объект со свойством Thing, которое должно иметь значение "Bar".

Я могу написать тестовый тест, чтобы проверить это, но я хотел бы иметь возможность выводить возвращаемый объект как часть теста, чтобы увидеть что-то вроде:

Name     Value
----     -----
Thing    Bar
Other    124
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, что является болезненным процессом.

Если у кого-нибудь есть какие-либо советы о том, как получить мой вывод, то я был бы признателен за совет.

Спасибо,

Дэйвид


person David Regan    schedule 16.04.2021    source источник


Ответы (2)


Кажется, ответ заключается в том, чтобы установить $VerbosePreference=Continue в сценарии.

E.g.

$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 и т. д.

person David Regan    schedule 16.04.2021

Вы можете получить доступ к StandardOutput для каждого теста, используя объект результата, который вы получаете с помощью -PassThru. Демо:

# 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}
person Frode F.    schedule 24.05.2021