<~2015>Windows PowerShellでBDD

今回は、PowerShellでもテストの話をしてみたいと思います。

PowerShellで使用できるテスティングフレームワークはいくつかあるのですが、その中でも先日紹介したChocolatecyからインストールできるBDDフレームのPesterを紹介します。

BDDはBehavior Driven Development(振る舞い駆動開発)と呼ばれるもので、TDD(テスト駆動開発)の概念を発展させ、ソフトウェアやAPIの外部から見た振る舞いと仕様を規定していきながら開発を進めていく手法です。

Chocolatecyから簡単にインストールできます。PowerShell ISEから使用できるようにするIsePesterも一緒に入れてしまいましょう。

C:\> 'pester', 'IsePester' | % { cinst $_ }

なぜかパスが追加されないので、$Profileに追加しておきます。

$Env:Path += ";C:\Chocolatey\lib\pester.2.0.3\tools\bin\";

インストールできたら、サンプルにある以下のテストコードを実行してみましょう。

C:\Chocolatey\lib\pester.2.0.3\tools\Examples\Calculator> pester.bat .\Add-Numbers.Tests.ps1
Executing all tests in C:\Chocolatey\lib\pester.2.0.3\tools\Examples\Calculator\Add-Numbers.Tests.ps1
Describing Add-Numbers
[+] adds positive numbers 106ms
[+] adds negative numbers 1ms
[+] adds one negative number to positive number 1ms
[+] concatenates strings if given strings 8ms
[+] should not be 0 4ms
Tests completed in 122ms
Passed: 5 Failed: 0

さらにISEを起動してテストコードを編集する場合、IsePesterをインストールしていれば、Ctrl-F5でPesterが実行されるようになるので、テストコードを書いて、対象コードを書いての繰り返しではISEから実行するのが便利です。

テストコードの中身は以下の通りです。

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
. "$here\Add-Numbers.ps1"

Describe -Tags "Example" "Add-Numbers" {

It "adds positive numbers" {
Add-Numbers 2 3 | Should Be 5
}

It "adds negative numbers" {
Add-Numbers (-2) (-2) | Should Be (-4)
}

It "adds one negative number to positive number" {
Add-Numbers (-2) 2 | Should Be 0
}

It "concatenates strings if given strings" {
Add-Numbers two three | Should Be "twothree"
}

It "should not be 0" {
Add-Numbers 2 3 | Should Not Be 0
}
}
最初の2行でテスト対象のコードを読み込みます。

残りの行がPesterにおけるテストコードになります。パイプを使って、結果を渡して評価しているのがPowerShellらしいですね。

Describe, It, Should, Not, BeなどはPesterがテストのために用意した関数でこのように特定目的(ここではテスト)のために用意した言語をDSL(Domain Specific Language)と呼びます。今回のようにDSLがそのまま処理言語に載るものを特に内部DSLと呼びます。

その他、テストで使える関数は以下のフォルダにあるので、参考にしながら実際に自分のテストを書いてみてください。

C:\Chocolatey\lib\pester.2.0.3\tools\Functions

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/