PS PowerShell  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Pester и тестирование

Pester и тестирование: практический тест по PowerShell с чтением кода, поиском причины ошибки и выбором надёжного решения. Темы: Describe и It, Подмены Mock в Pester, Временный диск TestDrive в Pester, Проверка инфраструктуры, Диагностика: Pester, Безопасная эксплуатация: Pester. Базовая линия — PowerShell 7.6.3; Windows-зависимые команды и отличия Windows PowerShell 5.1 отмечены в условиях.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант; близкие ответы различаются механизмом, порядком выполнения, областью действия или эксплуатационной границей. После завершения вы увидите общий результат, результаты по 6 тематическим шкалам и подробные объяснения.
Вопрос 1 из 30
Describe содержит Context и It. Как следует читать этот фрагмент?
PowerShellDescribe содержит Context и It
Describe "Get-Total" { Context "empty input" { It "returns zero" { Get-Total @() | Should -Be 0 } } }
Вопрос 2 из 30
BeforeEach создаёт состояние для каждого It. Как PowerShell обработает этот случай?
PowerShellBeforeEach создаёт состояние для каждого It
Describe X { BeforeEach{$script:n=0};It A{$script:n|Should -Be 0};It B{$script:n|Should -Be 0} }
Вопрос 3 из 30
ПослеAll освобождает ресурс. Как поступить, чтобы поведение осталось предсказуемым?
PowerShellПослеAll освобождает ресурс
$result = & { Describe X { BeforeAll{$r=[IO.MemoryStream]::new()};AfterAll{$r.Dispose()} } }
$shape = if($null -eq $result){'<null>'}elseif($result -is [array]){'array'}else{$result.GetType().Name}
[pscustomobject]@{ Shape=$shape; Values=@($result) }
Вопрос 4 из 30
Название It повторяет реализацию. Какое объяснение не зависит от случайностей окружения?
Вопрос 5 из 30
Один It проверяет десяток независимых сценариев. Какое утверждение верно для этого случая?
Вопрос 6 из 30
Mock подменяет команду внутри InModuleScope. Что остаётся непроверенным после успешного запуска?
PowerShellMock подменяет команду внутри InModuleScope
InModuleScope Demo { Mock Invoke-RestMethod { @{ok=$true} }; It "uses API" { Invoke-Demo | Should -BeTrue } }
Вопрос 7 из 30
Assert-MockCalled проверяет параметры. Какое утверждение верно для этого случая?
PowerShellAssert-MockCalled проверяет параметры
Should -Invoke Invoke-RestMethod -Times 1 -ParameterFilter {$Method -eq "Get" -and $Uri.Host -eq "api.example"}
Вопрос 8 из 30
Mock возвращает строку вместо объекта реальной команды. Какой принцип PowerShell здесь работает?
PowerShellMock возвращает строку вместо объекта реальной команды
Mock Get-Service { [pscustomobject]@{Name="Demo";Status=[ServiceProcess.ServiceControllerStatus]::Running} }
Вопрос 9 из 30
Mock используется для собственной чистой функции. На каком правиле основан результат?
Вопрос 10 из 30
Тест утверждает только факт вызова. Какой вывод был бы слишком сильным?
Вопрос 11 из 30
Файл создаётся в TestDrive. Какой результат увидит вызывающий код?
PowerShellФайл создаётся в TestDrive
It "writes report" { $p=Join-Path $TestDrive "out.json";Export-Report $p;Test-Path $p|Should -BeTrue }
Вопрос 12 из 30
Код использует жёсткий C:\Temp вместо переданного пути. Как следует читать этот фрагмент?
PowerShellКод использует жёсткий C:\Temp вместо переданного пути
$result = Invoke-Job -OutputPath (Join-Path $TestDrive "job")
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 13 из 30
TestDrive очищается между контейнерами. Что следует сделать до запуска в автоматизации?
PowerShellTestDrive очищается между контейнерами
$result = Get-ChildItem TestDrive:\
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 14 из 30
Как протестировать права NTFS?
Вопрос 15 из 30
Фикстура содержит символы Unicode и квадратные скобки. Что следует сделать до запуска в автоматизации?
Вопрос 16 из 30
Тест проверяет желаемое состояние сервиса. Какое утверждение верно для этого случая?
PowerShellТест проверяет желаемое состояние сервиса
$result = Describe "Service" { It "is running" { (Get-Service Demo).Status | Should -Be Running } }
$resultType = if($null -eq $result){'<null>'}else{$result.GetType().FullName}
[pscustomobject]@{ Result=$result; Type=$resultType; Count=@($result).Count }
Вопрос 17 из 30
Тест запускается на проде и создаёт ресурс. Что следует сделать до запуска в автоматизации?
PowerShellТест запускается на проде и создаёт ресурс
# Сценарий для ревью: Тест запускается на проде и создаёт ресурс.
BeforeAll { Import-Module "$PSScriptRoot/../Ops.psm1" -Force }
Describe 'operational contract' {
  Mock Invoke-RestMethod { @{status='ok'} } -ModuleName Ops
  It 'returns a structured result' { Invoke-OpsCheck | Should -Not -BeNullOrEmpty }
}
Вопрос 18 из 30
Проверяется порт и затем HTTP health. Как поступить, чтобы поведение осталось предсказуемым?
PowerShellПроверяется порт и затем HTTP health
Test-NetConnection $host -Port 443 | Select-Object TcpTestSucceeded
Invoke-RestMethod "https://$host/health"
Вопрос 19 из 30
Ожидаемое значение зависит от среды. На каком правиле основан результат?
Вопрос 20 из 30
Тест нестабилен из-за eventual consistency. Какая граница важна для автоматизации?
Вопрос 21 из 30
Тест проходит отдельно и падает в наборе. Какой принцип PowerShell здесь работает?
PowerShellТест проходит отдельно и падает в наборе
$result = & { Invoke-Pester -Configuration @{Run=@{Path="./tests"};Output=@{Verbosity="Detailed"}} }
$summary = [ordered]@{ IsNull=($null -eq $result); Count=@($result).Count }
if($null -ne $result){$summary.Type=$result.GetType().FullName};[pscustomobject]$summary
Вопрос 22 из 30
Mock не сработал. Какое условие нужно проверить отдельно?
PowerShellMock не сработал
# Сценарий для ревью: Mock не сработал.
BeforeAll { Import-Module "$PSScriptRoot/../Ops.psm1" -Force }
Describe 'operational contract' {
  Mock Invoke-RestMethod { @{status='ok'} } -ModuleName Ops
  It 'returns a structured result' { Invoke-OpsCheck | Should -Not -BeNullOrEmpty }
}
Вопрос 23 из 30
Тест медленный. На каком правиле основан результат?
PowerShellТест медленный
# Сценарий для ревью: Тест медленный.
BeforeAll { Import-Module "$PSScriptRoot/../Ops.psm1" -Force }
Describe 'operational contract' {
  Mock Invoke-RestMethod { @{status='ok'} } -ModuleName Ops
  It 'returns a structured result' { Invoke-OpsCheck | Should -Not -BeNullOrEmpty }
}
Вопрос 24 из 30
Should -Throw не ловит ошибку. Что следует сделать до запуска в автоматизации?
Вопрос 25 из 30
Тест сравнивает текст форматированной таблицы. Какое условие нужно проверить отдельно?
Вопрос 26 из 30
Тесты получают производственный секрет. Какое ограничение здесь нельзя упустить?
PowerShellТесты получают производственный секрет
# Сценарий для ревью: Тесты получают производственный секрет.
$context = [pscustomobject]@{ User=[Environment]::UserName; Host=$Host.Name; At=[datetimeoffset]::UtcNow }
$headers = @{ Authorization = "Bearer $env:API_TOKEN" }
Write-Information (ConvertTo-Json @{ Context=$context; Headers=$headers }) -InformationAction Continue
Invoke-RestMethod -Uri $uri -Headers $headers -ErrorAction Stop
Вопрос 27 из 30
Mock скрывает проверку авторизации. Какой вывод можно подтвердить?
PowerShellMock скрывает проверку авторизации
# Сценарий для ревью: Mock скрывает проверку авторизации.
BeforeAll { Import-Module "$PSScriptRoot/../Ops.psm1" -Force }
Describe 'operational contract' {
  Mock Invoke-RestMethod { @{status='ok'} } -ModuleName Ops
  It 'returns a structured result' { Invoke-OpsCheck | Should -Not -BeNullOrEmpty }
}
Вопрос 28 из 30
CI запускает неподписанные тестовые помощники с высокими правами. Что стоит изменить в первую очередь?
PowerShellCI запускает неподписанные тестовые помощники с высокими правами
# Сценарий для ревью: CI запускает неподписанные тестовые помощники с высокими правами.
$policy = Get-ExecutionPolicy -List
$signature = Get-AuthenticodeSignature -FilePath .\deploy.ps1
[pscustomobject]@{ Policy=$policy; Status=$signature.Status; Signer=$signature.SignerCertificate.Subject }
if($signature.Status -eq 'Valid'){ & .\deploy.ps1 }
Вопрос 29 из 30
Неудачный тест печатает весь объект credential. Какой вывод можно подтвердить?
Вопрос 30 из 30
Инфраструктурные тесты автоматически чинят прод. Какое утверждение верно для этого случая?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу