メモ:wsh/JScriptのテスト

wshテスト駆動開発をやろうとすると、wshJScriptはインクルードみたいな便利な仕組みを持たないので、仕方ないので、自作のassertEqualやら、assertTrueやらを作って、オンコードでゴリゴリと書いていた。昔は。というか、ついこの間まで。

// for unittest
function assertEqual(expected, result, comment)
{
  if(expected != result)
    WScript.Echo(comment + ":expected is " + expected + " but result =>" + result);
}

functtion assertTrue(expected)
{
  if(!expected)
    WScript.Echo("expected " + expected + " is not true!");
}
// implimentation
function add(a, b)
{
  return a + b;
}
function multi(a, b)
{
  return a*b;
}
// test
assertEqual(5, add(2,3), "add"); // ok
assertEqual(8, multi(3,3), "multi"); // ng
assertTrue(typeof(10) == "number"); // ok
assertTrue(typeof("aa") == "number") // ng

setupもteardownも無いんだが、それなりに、まぁ使えるんだが、これの欠点はテストコードが分離できないことで、テスト対象のコードとテスト用のコードがごっちゃに入る、筋の悪い方法である。JScriptの仕組み上仕方ないかな(外部ファイルをFileSystemObjectを使って、1行づつevalしてincludeを実装する猛者を見たことがあるけど、、それも問題含みなので敬遠したい)と、思っていた。ら、最近こんなものを見つけてしまった。
http://d.hatena.ne.jp/language_and_engineering/20090413/p1
そうか、wsf使えばファイルを分離できるんだった。
テスト時はwsfで実行。
本番実行時は、テストを含まないjsを実行。
これはうまい分離のやり方だと思った。
というわけで、俺も俺専用のオレオレtesting frameworkを作るべく考えてみた。
が、世の中には同じようなことを考えている先人がたくさんいるようだ。
で、最近はこちらを使用してテストしております。
http://code.google.com/p/jsunity/



というか、いまだにwshにこだわってどうするんだという気もした。
powershellにガッツリスクリプトを書いちゃえばいいじゃないか。
と、いつも思うが、どうもあの文法が好きになれない。