Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

それでも僕はユニットテストを書きたい - Pester powered by PowerShell

3.901 visualizaciones

Publicado el

第6回 PowerShell 勉強会 @日本マイクロソフト 関西支店でのLT資料です。

Publicado en: Tecnología
  • Sé el primero en comentar

それでも僕はユニットテストを書きたい - Pester powered by PowerShell

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

×