私がせがむことは非常に新しいですし、私は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
機能パイプライン入力を受け付けているので、私の目的は何のparamsを受け入れていない一般的なStop-Process
関数を作成し、同様の機能をないモックすることです。
助けてくれるPesterの専門家はいますか?
Saying _ "はparaemtersを定義してはいけません[...]" _は、他の答えを_incorrect_にしません。 – Clijsters
実際には、反射では、私は推測されているコマンドレットの機能にはない追加パラメータを定義できますが、自動的に作成されたパラメータを再定義しないように注意する必要があります。申し訳ありませんが、私は私の答えを修正します。 –