Я очень новый приставать, и я пытаюсь построить тесты для очень небольшой и простой функции в PowerShell:Как должна функция Mock принимать вход конвейера в Pester?
function Toggle-Notepad {
if (-not (Get-Process notepad -ErrorAction SilentlyContinue))
{
Start-Process -FilePath Notepad
}
else
{
get-process notepad | stop-process
}
}
Эта функция только начинает блокнот, если она не работает, иначе, если он работает она останавливается Это.
тест, который я разработал это:
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
. "$here\$sut"
Describe "Toggle-Notepad" {
Mock Stop-Process { "Process object passed! Stopping notepad!" }
Mock Start-Process { "Notepad is not running,starting it!" } -ParameterFilter { $Filepath -eq "Notepad" }
It "Starts notepad if it is not running" {
Toggle-Notepad | Should be "Notepad is not running,starting it!"
}
It "Stops notepad if it is running" {
Toggle-Notepad | Should be "Process object passed ! Stopping notepad!"
}
}
Вышеуказанные испытания выполняются, как ожидалось.
Как переписать функцию Stop-Process
, чтобы я мог указать, что эта версия предназначена для приема ввода конвейера?
Я попытался это, но он не работает:
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$sut = (Split-Path -Leaf $MyInvocation.MyCommand.Path) -replace '\.Tests\.', '.'
. "$here\$sut"
Describe "Toggle-Notepad" {
Mock stop-process { "Process object passed ! Stopping notepad" } -ParameterFilter { $InputObject -is "System.Diagnostics.Process" }
Mock Start-Process {"Notepad is not running,starting it!"} -ParameterFilter { $Filepath -eq "Notepad" }
It "Starts notepad if it is not running" {
Toggle-Notepad | Should be "Notepad is not running,starting it!"
}
It "Stops notepad if it is running" {
Toggle-Notepad | Should be "Process object passed ! Stopping notepad!"
}
}
Поскольку функция Stop-Process
принимает входные данные из конвейера моя цель заключается в дразнят функцию, аналогичную функции, а не создавать общую Stop-Process
функцию, которая не несет Params ,
Есть ли кто-нибудь из экспертов Pester, кто может помочь?
Высказывание _ «не должно определять барабанщиков [...]» _ не делает другой ответ _incorrect_, особенно если он работает так, как ожидалось. – Clijsters
Да, на самом деле, при отражении вы можете определить дополнительные параметры, которых не было в функции командлета, издевающегося, я думаю, но вы должны быть осторожны, чтобы не переопределять параметры, которые создаются автоматически. Извините, я пересмотрю свой ответ. –