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

More Related Content

What's hot

MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
Yoshinori Matsunobu
 

What's hot (20)

SQL Server コンテナ入門(Kubernetes編)
SQL Server コンテナ入門(Kubernetes編)SQL Server コンテナ入門(Kubernetes編)
SQL Server コンテナ入門(Kubernetes編)
 
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
もう知らずにはいられないGitOpsをArgoCDで学ぶ【WESEEK Tech Conf #3】
 
Hyper v ネットワークの基本
Hyper v ネットワークの基本Hyper v ネットワークの基本
Hyper v ネットワークの基本
 
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法についてAzure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について
 
OSSを活用したIaCの実現
OSSを活用したIaCの実現OSSを活用したIaCの実現
OSSを活用したIaCの実現
 
入門Ansible
入門Ansible入門Ansible
入門Ansible
 
Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
詳説!Azure AD 条件付きアクセス - 動作の仕組みを理解する編
詳説!Azure AD 条件付きアクセス - 動作の仕組みを理解する編詳説!Azure AD 条件付きアクセス - 動作の仕組みを理解する編
詳説!Azure AD 条件付きアクセス - 動作の仕組みを理解する編
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
KiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアルKiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアル
 
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
 
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
Introducing the elastic 8.0 release a new era of speed, scale, relevance, and...
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 

Viewers also liked

SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Nov Matake
 
Unit testing powershell
Unit testing powershellUnit testing powershell
Unit testing powershell
Matt Wrock
 

Viewers also liked (11)

PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでPowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
 
Azure Storage Partition Internals
Azure Storage Partition  Internals Azure Storage Partition  Internals
Azure Storage Partition Internals
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
Grani's way of thinking infrastructure
Grani's way of thinking infrastructureGrani's way of thinking infrastructure
Grani's way of thinking infrastructure
 
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of GraniA Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
Unit testing powershell
Unit testing powershellUnit testing powershell
Unit testing powershell
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
DevOps Practices: Configuration as Code
DevOps Practices:Configuration as CodeDevOps Practices:Configuration as Code
DevOps Practices: Configuration as Code
 
がんばれガンプ ソルバルウを倒せについて
がんばれガンプ ソルバルウを倒せについてがんばれガンプ ソルバルウを倒せについて
がんばれガンプ ソルバルウを倒せについて
 
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at NetflixConfiguration As Code - Adoption of the Job DSL Plugin at Netflix
Configuration As Code - Adoption of the Job DSL Plugin at Netflix
 

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

Power shellmemo
Power shellmemoPower shellmemo
Power shellmemo
ytanno
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
Hideharu MATSUFUJI
 

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

Power shellmemo
Power shellmemoPower shellmemo
Power shellmemo
 
Powershell基礎_20180521用
Powershell基礎_20180521用Powershell基礎_20180521用
Powershell基礎_20180521用
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回運用構築技術者の為のPSプログラミング第2回
運用構築技術者の為のPSプログラミング第2回
 
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするマルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
 
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームするマルチプラットホームになった PowerShell 6 でクロスプラットホームする
マルチプラットホームになった PowerShell 6 でクロスプラットホームする
 
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう
社内システムの移行に役立った“時間節約”方法~PowerShellとExcelを上手に使おう
 
Rspec
RspecRspec
Rspec
 
最近の PowerShell のお話
最近の PowerShell のお話最近の PowerShell のお話
最近の PowerShell のお話
 
EWD 3トレーニングコース#4 ewd-xpressのインストールと構成
EWD 3トレーニングコース#4 ewd-xpressのインストールと構成EWD 3トレーニングコース#4 ewd-xpressのインストールと構成
EWD 3トレーニングコース#4 ewd-xpressのインストールと構成
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
 
HDPをWindowsで動かしてみた
HDPをWindowsで動かしてみたHDPをWindowsで動かしてみた
HDPをWindowsで動かしてみた
 
PowerShell and Release Management Server
PowerShell and  Release Management ServerPowerShell and  Release Management Server
PowerShell and Release Management Server
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 

More from Hidari Ikw (6)

Psakeちょこっとだけ
PsakeちょこっとだけPsakeちょこっとだけ
Psakeちょこっとだけ
 
Windowsでの自動化の手段
Windowsでの自動化の手段Windowsでの自動化の手段
Windowsでの自動化の手段
 
Xmlシリアライズ
XmlシリアライズXmlシリアライズ
Xmlシリアライズ
 
若さゆえの継続的アクション
若さゆえの継続的アクション若さゆえの継続的アクション
若さゆえの継続的アクション
 
勝手に始めるというプラクティス
勝手に始めるというプラクティス勝手に始めるというプラクティス
勝手に始めるというプラクティス
 
Jenkinsからはじめた若者のための新ツール一歩目
Jenkinsからはじめた若者のための新ツール一歩目Jenkinsからはじめた若者のための新ツール一歩目
Jenkinsからはじめた若者のための新ツール一歩目
 

Recently uploaded

Recently uploaded (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

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