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

25
それでも僕は ユニットテストを書きたい Pester - powered by PowerShell 2016/4/9(Sat) 6 PowerShell 勉強会 @日本マイクロソフト 関西支店 Twitter: @HIDARI0415

Upload: hidari-ikw

Post on 23-Jan-2018

3.007 views

Category:

Technology


0 download

TRANSCRIPT

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

それでも僕はユニットテストを書きたい

Pester - powered by PowerShell

2016/4/9(Sat) 第 6 回 PowerShell 勉強会 @日本マイクロソフト 関西支店Twitter: @HIDARI0415

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

Pester

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

Pesterとは

❏ PowerShellのためのテスティングフレームワーク

❏ 内部はPowerShellで書かれたDSL❏ Windows 10から標準搭載

❏ NuGetから手に入る

❏ PowerShell本家のテストもPesterに移行中

❏ BDDスタイルでテストを記述

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

Pesterとは

Describe "意識高い系" { It "ビジネスのオポチュニティ" { Set-価値ある仕事 | Should Be "すごい価値が生まれる" }}

BDDスタイル

Assert.AreEqual(expected, hoge);

参考:TDDスタイル

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

Pesterとは

❏ Invoke-Pesterコマンドでテストを実行

❏ *.Tests.ps1というファイルをテストとして実行

❏ 現在のフォルダで再帰的にファイルを検索

❏ -TestName オプションでテスト名を指定可能

C:\PS> Invoke-Pester

C:\PS> Invoke-Pester -TestName 意識高い系, スタバMacドヤリング

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

Features

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

Pesterの特徴

❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能

❏ CIのための複数のオプション

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

Pesterの特徴

❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能

❏ CIのための複数のオプション

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

Pesterの特徴 ー 安全なテストのためのTestDrive

❏ TestDrive:\ or $TestDrive でテスト実行時の一時的な

ドライブにアクセス

❏ ファイル操作での副作用のある挙動をテスト

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

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

❏ TestDriveはDescribe開始時に作成、終了時に破棄される

❏ 各Contextで追加されたファイルは終了時に削除される

❏ Context内でのファイル内容の変更は次のContextに持ち

越されるので注意

Pesterの特徴 ー 安全なテストのためのTestDrive

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

Pesterの特徴

❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能

❏ CIのための複数のオプション

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

❏ Mockによるシンプルな記述

❏ Assert-VerifiableMocks、Assert-MockCalledによ

るパワフルなチェック

Pesterの特徴 ー パワフルなMock

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

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

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

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

Pesterの特徴

❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能

❏ CIのための複数のオプション

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

❏ Invoke-Pesterの-CodeCoverageパラメータを使用

❏ 分析対象をファイルパスか、ファイルパスを含む

hashtableで指定

Pesterの特徴 ー デフォルトでCodeCoverageを計測可能

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

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

❏ 安全なテストのためのTestDrive❏ パワフルなMock❏ デフォルトでCodeCoverageを計測可能

❏ CIのための複数のオプション

Pesterの特徴

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

❏ Invoke-PesterにCIのためのパラメータ

❏ -OutputFileパラメータを使ってNUnit形式のXMLを出力で

きるので、お好みのCIツールを使って解決

❏ -EnableExitスイッチを指定するとリターンコードを伴って

PowerShellのセッションを終了する

Pesterの特徴 ー CIのための複数のオプション

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

❏ -PassThru でInvoke-Pesterの実行結果を格納したオブジェ

クトを返す

❏ CI環境で直接PowerShellを実行出来るならこのオブジェク

トを使って後続処理

❏ TotalCount/PassedCount/FailedCount❏ Time❏ TestResult

Pesterの特徴 ー CIのための複数のオプション

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

Information

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

Enjoy Testing, Enjoy Pester!