それでも僕はユニットテストを書きたい - Pester powered by PowerShell
-
Upload
hidari-ikw -
Category
Technology
-
view
3.010 -
download
0
Transcript of それでも僕はユニットテストを書きたい - Pester powered by PowerShell
![Page 1: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/1.jpg)
それでも僕はユニットテストを書きたい
Pester - powered by PowerShell
2016/4/9(Sat) 第 6 回 PowerShell 勉強会 @日本マイクロソフト 関西支店Twitter: @HIDARI0415
![Page 2: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/2.jpg)
Pester
![Page 3: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/3.jpg)
Pesterとは
❏ PowerShellのためのテスティングフレームワーク
❏ 内部はPowerShellで書かれたDSL❏ Windows 10から標準搭載
❏ NuGetから手に入る
❏ PowerShell本家のテストもPesterに移行中
❏ BDDスタイルでテストを記述
![Page 4: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/4.jpg)
Pesterとは
Describe "意識高い系" { It "ビジネスのオポチュニティ" { Set-価値ある仕事 | Should Be "すごい価値が生まれる" }}
BDDスタイル
Assert.AreEqual(expected, hoge);
参考:TDDスタイル
![Page 5: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/5.jpg)
Pesterとは
❏ Invoke-Pesterコマンドでテストを実行
❏ *.Tests.ps1というファイルをテストとして実行
❏ 現在のフォルダで再帰的にファイルを検索
❏ -TestName オプションでテスト名を指定可能
C:\PS> Invoke-Pester
C:\PS> Invoke-Pester -TestName 意識高い系, スタバMacドヤリング
![Page 6: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/6.jpg)
Features
![Page 7: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/7.jpg)
Pesterの特徴
❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能
❏ CIのための複数のオプション
![Page 8: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/8.jpg)
Pesterの特徴
❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能
❏ CIのための複数のオプション
![Page 9: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/9.jpg)
Pesterの特徴 ー 安全なテストのためのTestDrive
❏ TestDrive:\ or $TestDrive でテスト実行時の一時的な
ドライブにアクセス
❏ ファイル操作での副作用のある挙動をテスト
![Page 10: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/10.jpg)
function Add-付加価値($path, $付加価値) { Add-Content $path -Value $付加価値
}Describe "Add-付加価値" { $testPath = "TestDrive:\付加価値のあるテキスト.txt" Set-Content $testPath -value "ビジネスを円滑に進めるソリューション" Add-付加価値 $testPath " -高い付加価値" $result = Get-Content $testPath
It "adds a 付加価値" { (-join $result) ` | Should Be "ビジネスを円滑に進めるソリューション -高い付加価値" }}
Pesterの特徴 ー 安全なテストのためのTestDrive
![Page 11: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/11.jpg)
❏ TestDriveはDescribe開始時に作成、終了時に破棄される
❏ 各Contextで追加されたファイルは終了時に削除される
❏ Context内でのファイル内容の変更は次のContextに持ち
越されるので注意
Pesterの特徴 ー 安全なテストのためのTestDrive
![Page 12: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/12.jpg)
Pesterの特徴
❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能
❏ CIのための複数のオプション
![Page 13: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/13.jpg)
❏ Mockによるシンプルな記述
❏ Assert-VerifiableMocks、Assert-MockCalledによ
るパワフルなチェック
Pesterの特徴 ー パワフルなMock
![Page 14: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/14.jpg)
Mock
❏ 指定したコマンドをモック化する
❏ 特定のパラメータで呼び出されたときだけモック化可能
Pesterの特徴 ー パワフルなMock
Mock ` -CommandName Get-ChildItem ` -MockWith {return @{FullName = "A_File.TXT"} } ` -ParameterFilter {$Path -and $Path.StartsWith($env:temp)}
![Page 15: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/15.jpg)
Assert-VerifiableMocks
❏ -VerifiableなMockが呼ばれたかをチェック
Pesterの特徴 ー パワフルなMock
Mock `Set-Content {} ` -Verifiable ` -ParameterFilter {$Value -eq "Expected Value"}
Set-Content some_path -Value "Expected Value"
Assert-VerifiableMocks
![Page 16: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/16.jpg)
Assert-MockCalled
❏ Mockが指定回数呼ばれているかをチェック
Pesterの特徴 ー パワフルなMock
Mock Set-Content ` -ParameterFilter {$path.StartsWith("$env:temp\")}
Assert-MockCalled ` -CommandName Set-Content ` -Times 2 ` -ParameterFilter { $path -eq "$env:temp\test.txt" }
![Page 17: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/17.jpg)
Pesterの特徴
❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能
❏ CIのための複数のオプション
![Page 18: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/18.jpg)
❏ Invoke-Pesterの-CodeCoverageパラメータを使用
❏ 分析対象をファイルパスか、ファイルパスを含む
hashtableで指定
Pesterの特徴 ー デフォルトでCodeCoverageを計測可能
![Page 19: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/19.jpg)
C:\PS> Invoke-Pester .\結果にコミットする.Tests.ps1 ` -CodeCoverage @{Path='.\結果にコミットする\.ps1'; Function='ライ●ップ'}
Code coverage report:Covered 66.67 % of 3 analyzed commands in 1 file.
Missed commands:
File Function Line Command---- -------- ---- -------結果にコミットする.ps1 ライ●ップ 5 return '世界一のボディメイクを達成'
Pesterの特徴 ー デフォルトでCodeCoverageを計測可能
![Page 20: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/20.jpg)
❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能
❏ CIのための複数のオプション
Pesterの特徴
![Page 21: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/21.jpg)
❏ Invoke-PesterにCIのためのパラメータ
❏ -OutputFileパラメータを使ってNUnit形式のXMLを出力で
きるので、お好みのCIツールを使って解決
❏ -EnableExitスイッチを指定するとリターンコードを伴って
PowerShellのセッションを終了する
Pesterの特徴 ー CIのための複数のオプション
![Page 22: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/22.jpg)
❏ -PassThru でInvoke-Pesterの実行結果を格納したオブジェ
クトを返す
❏ CI環境で直接PowerShellを実行出来るならこのオブジェク
トを使って後続処理
❏ TotalCount/PassedCount/FailedCount❏ Time❏ TestResult
Pesterの特徴 ー CIのための複数のオプション
![Page 23: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/23.jpg)
Information
![Page 24: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/24.jpg)
Pesterの情報
❏ Pester Wiki❏ PowershellでPesterを使ってテストしてみた - なか日記
❏ PesterのMock機能をもう少し詳しく│株式会社シフト
❏ Get started with Pester (PowerShell unit testing framework)❏ Testing your PowerShell scripts with Pester: Assertions and
more
![Page 25: それでも僕はユニットテストを書きたい - Pester powered by PowerShell](https://reader034.fdocuments.net/reader034/viewer/2022050613/587585731a28ab901c8b4a1f/html5/thumbnails/25.jpg)
Enjoy Testing, Enjoy Pester!