@biacさんのブログ「PSExpect - PowerShell 用ユニット テスト ライブラリー: biac の それさえもおそらくは幸せな日々@nifty」で紹介されていた
psexpect
を使用してFizzFuzzやってみました。
ファイルの配置
ファイルはこんな感じ。
\PowerShell +-PSExpect … PSExpect本体 +-FizzBuzz.ps1 … FizzBuzz本体 +-FizzBuzzTest.ps1 … テストコード
FizzBuzz本体(FizzBuzz.ps1)
まずはFizzBuzz本体。
function global:FizzBuzz([int]$x) { if (($x % 3 -eq 0) -and ($x % 5 -eq 0)){ return "FizzBuzz" } if ($x % 3 -eq 0) { return "Fizz" } if ($x % 5 -eq 0) { return "Buzz" } return $x }
スクリプトファイル内で宣言された関数を別のスクリプトファイルから参照したいので、「global:」というスコープ修飾子を付けてます。
テストコード(FizzBuzzTest.ps1)
で、テストコード。
if (!(Test-Path variable:_TESTLIB)) { .\PSExpect\TestLib.ps1 } .\FizzBuzz.ps1 function Check([int]$x, $expected) { $result = FizzBuzz($x) AssertEqual $expected $result ("arg:" + $x) RaiseAssertions } Check 1 1 Check 2 2 Check 3 "Fizz" Check 5 "Buzz" Check 6 "Fizz" Check 10 "Buzz" Check 15 "FizzBuzz"
1行目でPSExpectを読み込んで(見たまんまですねw)、2行目でFizzBuzz本体のスクリプトを読み込ませてます。
PSExpectの使い方としては、AssertEqual等のチェックを書いておいて、RaiseAssertionsでコンソールにAssertionの結果を表示するような感じです。
実行すると、以下の様な結果がコンソールに出力されます。
2010/10/19 22:06:54,SHOULDPASS,PASSED,arg:1 2010/10/19 22:06:54,SHOULDPASS,PASSED,arg:2 2010/10/19 22:06:54,SHOULDPASS,PASSED,arg:3 2010/10/19 22:06:54,SHOULDPASS,PASSED,arg:5 2010/10/19 22:06:54,SHOULDPASS,PASSED,arg:6 2010/10/19 22:06:54,SHOULDPASS,PASSED,arg:10 2010/10/19 22:06:54,SHOULDPASS,PASSED,arg:15
その他いろいろ機能はありそうなのですが、今回はさわりということでこの辺でw