元ネタはこちら。
そろそろPester 4のリリースも近づいているかなと思い、新機能や変更点をざっくりとまとめてみました。
Pester 4のインストール
現時点での最新版はVer.4.0.3(Release Candidate扱い)となっており、PowerShell Galleryから入手することができます。
Install-Module Pester
コマンドで普通にインストールできるはずですが、PowerShell 5.0以降の環境であれば標準でPester(Ver.3系)がインストール済みであるため-Force
や-SkipPublisherCheckget
パラメーターを指定する必要があるかもしれません。
私の環境では両方のパラメーター指定が必要でした。
インストール例)
Install-Module Pester -Scope CurrentUser -Force -SkipPublisherCheckget
これでPester 4の新機能を試すことができます。
1. 文法の変更
最初はVer.4で発生した文法の変更について記載します。
Should
とともに使用していたBe
等の動詞がVer.4から名前付きのダイナミックパラメーターとなり、-Be
の様に指定することが可能になりました。
互換性を維持するため従来の記法は残されていますがいずれ廃止されるそうです。(時期は未定)
以下に簡単な例を示します。
# 従来の文法 Import-Module Pester -MaximumVersion 3.4.0 -Force Describe '従来の文法 - 動詞のパラメーター化' { It '足し算のテスト' { 1 + 1 | Should Be 2 } }
# Ver.4からの文法 Import-Module Pester -MinimumVersion 4.0.3 -Force Describe '新しい文法 - 動詞のパラメーター化' { It '足し算のテスト' { # BeなどがShouldの名前付きパラメーターに 1 + 1 | Should -Be 2 } }
この変更によりISEやVSCodeなどのインテリセンスに各動詞が表示される様になり、よりコーディングがしやくすなります。
2. 配列を入力する際の仕様変更
Should Be
における配列の扱いがVer.4から変更されます。
Ver.3までは以下のテストは$true
を返していましたが、Ver.4からこれは$false
を返す様になります。
# 従来の挙動 Import-Module Pester -MaximumVersion 3.4.0 -Force Describe '従来の文法 - 配列の挙動' { It 'バージョン3までは通るテスト' { @( $true, $true, $true ) | Should Be $true } }
Ver.4からこのテストを通すには以下の様に記述する必要があります。
# Ver.4からの挙動 Import-Module Pester -MinimumVersion 4.0.3 -Force Describe '新しい文法 - 配列の挙動' { It 'バージョン4で通るテスト' { @( $true, $true, $true ) | Should -Be @( $true, $true, $true ) } }
見てわかるかと思いますが、Ver.4からはShould
に対して配列の要素ではなく配列全体が比較の対象になる様に変更されています。
3. 表示色の刷新
Ver.4からテスト結果の表示色が新しくなります。
Ver.3までの色はこちら。
Ver.4からの色はこちら。
色を変えた意図がいまいち掴めなかったのですが、コミットログを追う限りでは、従来ホスト毎にカラースキームを持ち色分けしていた部分を統一しシンプルにした影響を受けている様です。
4. ContextとDescribeのネスト
Ver.4からContext
とDescribe
をネストすることが可能になります。
Ver.3まではネストするとエラーになりました。
設定例)
# Ver.4からの挙動 Import-Module Pester -MinimumVersion 4.0.3 -Force Describe '新しい文法 - Describe ネスト1' { Describe '新しい文法 - Describe ネスト2' { Context '新しい文法 - Context ネスト1' { It '足し算のテスト' { 1 + 1 | Should -Be 2 } } } }
5. Gherkinのサポート
Ver.4からPesterでGherkin(ガーキン)を使ったFeatureファイルによるテストがサポートされる様になりました。
Gherkinとは何ぞやといった話については、
いまさら聞けないTDD/BDD超入門(2):TDD/BDDの思想とテスティングフレームワークの関係を整理しよう (3/3) - @IT
や
Cucumber のフィーチャの文法 - Gherkin | そんなこと覚えてない
が参考になります。
使い方としては、Featureファイル(ほげほげ.feature
)とStepファイル(ほげほげ.steps.ps1
)を記述し、Invoke-Gherkin
コマンドを呼ぶことでテストを実行することができます。
Featureファイルにおける各機能は以下の様にPesterの機能と対応しています。
- Feature(フィーチャ) = Describe
- Scenario(シナリオ) = Context
- 各ステップ = It
正直良い例が思いつかなったので、先述の@ITの記事にあるサンプルをPesterに合わせた形にして例示します。
Featureファイル(Sample.feature)
# language: ja フィーチャ: TDDのサイクルはRED、GREEN、REFACTORからなっています。 GREENからREFACTORを飛ばすことはありますが、REDからGREENを飛ばしてREFACTORしないのが特徴です。 これはテストなどによって保証されている範囲でのみ内部を変更することを「REFACTORING」と呼ぶという定義によるものです。 シナリオ: プロジェクトを始めるときにTDDの最初の一歩になる手順 前提 プロジェクトを始めるときはテストがない もし 要求を満たすテストを追加する かつ テストを実行する ならば テストが失敗して、TDDでいう「RED」になる
Stepファイル(Sample.steps.ps1)
Given 'プロジェクトを始めるときはテストがない' { # 処理 } When '要求を満たすテストを追加する' { # 処理 } And 'テストを実行する' { # 処理 } Then 'テストが失敗して、TDDでいう「RED」になる' { # 処理 }
テスト実行例)
# カレントディレクトリにあるすべての.featureファイルを実行する Invoke-Gherkin # Pathを指定する場合 # [Feature名].Steps.ps1 という名称のStepファイルを自動で取り込む Invoke-Gherkin -Path .\Sample.feature
実行した結果はこんな感じになります。
まだ英語以外の言語では警告がでる様です。
ちなみにGitHubにもサンプルがありますのでこちらを参照するのも良いかと思います。
6. 非推奨、または廃止された機能
Ver.4になって非推奨、または廃止された機能は以下となります。
Invoke-Pester
の-Quiet
パラメーターは非推奨になり、代わりに-Show None
を使うことが推奨されます。
-Show
パラメーターにはPester.OutputTypes
列挙型の値を指定することができ、以下の様に定義されています。
namespace Pester { [Flags] public enum OutputTypes { None = 0, Default = 1, Passed = 2, Failed = 4, Pending = 8, Skipped = 16, Inconclusive = 32, Describe = 64, Context = 128, Summary = 256, Header = 512, All = Default | Passed | Failed | Pending | Skipped | Inconclusive | Describe | Context | Summary | Header, Fails = Default | Failed | Pending | Skipped | Inconclusive | Describe | Context | Summary | Header } }
New-TestDriveItem
は無くなりました。(ただ、昔から無い様に見受けられます...)Invoke-Pester
の-OutputXml
パラメーターは無くなり、-OutputFile
と-OutputFormat
の組み合わせに変更されます。
-OutputFormat
はいまのところNUnitXml
のみですが、今後のバージョンで増える可能性はありそうです。
最後に
とりあえずこんな感じです。
Pester 4のリリース時期はまだ具体的に決まっていない様ですが、今から備えておくのも良いかと思います。