何故か急にTDDなやり方がしっくり来るようになった。
早朝6:00頃に家を出て、出社するまで何をしているかっていうと、ひたすらコード(プログラム)を最近書いてます。
何故かわからないけど、自分のなかで何かがハジけたっていうか、急に「わかる」ようになった感覚が芽生えて、TDD(テスト駆動開発)なやり方がしっくり来るようになって、最初にテスト書きながら仕様固めて・・・というのがスムーズになったから、コードを書くのがとっても楽しいなぁーと思えるようになりました。
最近の自分のハマっているものは、このコードを書くことと育児の2つかなって思える位です(笑)
TDDなやり方をするとなると、テストフレームワークを使うというのを書籍なんかで見かけて、一時期色々探したような気がするけど、諸事情あって、JavaScript / JScriptの両方で活用出来るものというのが前提になるから、 JavaScriptの単体テストフレームワーク "simpleJsUnit" で,テスト駆動開発をしよう - 主に言語とシステム開発に関してのブログに書かれているsimpleJSUnit(リンク先は該当のJavaScriptのファイルです)を利用してて、かなりお世話になってます。
assertとexpectそれぞれで配列を指定した場合に、見た目には同じ結果のはずなのに、何故かテスト失敗してしまうことがあったから、テストの書き方についてもう少しドキュメントを読む必要がありそうだなぁ。
現在書いているのはこんな感じで、IT技術者が保有しているスキルのチェックをするようなクラスをイメージしてます。
//TestITSkill.js new UnitTest({ desc:"ITスキルを表しているクラスのテスト", cases:[ function(){ var sk = new ITSkill(); this.a("Java", sk.get()); var Mike_IT_skill = ["vb","Oracle","SQLServer","AccessVBA","VB.NET","bash"]; this.a("rankA", sk.chkVBSkill(Mike_IT_skill)); var Yamada_IT_skill = ["Windows 2000 Server","Linux","MySQL","bash","PostgreSQL"]; this.a("rankB", sk.chkVBSkill(Yamada_IT_skill)); var Hanako_IT_skill = ["word", "excel"]; this.a("rankB", sk.chkVBSkill(Hanako_IT_skill)); } ] });
本体はこんな↓感じ
//ITSkill.js var ITSkill = function(usercd){ //仮に該当するusercdの人材が下記のスキルを保有していると仮定して固定的に値を挿入 var _items = ['VB','Oracle','Java','VB.NET','bash','C','MySQL']; this.myskill = _items; this._vbrank=""; }; ITSkill.prototype = { get:function(){ return this.myskill[2]; }, chkVBSkill:function(o){ var baseSkill=[];//判断基準となるスキル一覧を配列へ var _rank; if(o) { baseSkill = o; } else { baseSkill = ["vb","Oracle","SQLServer","VB.NET"]; } /* 判断基準となるスキル一覧とthis.myskillで保有している 配列の集合演算(prototype.js を活用)を行った結果の 配列の長さをみることで、スキル判定 を行うようにする */ var VB_BASELINE_SKILL = 2; if(this.myskill.intersect(baseSkill).length > VB_BASELINE_SKILL){ _rank = "rankA"; } else { _rank = "rankB"; } return _rank; } };
あとは、こんな↓感じのHTMLのファイルを準備してブラウザでこのHTMLファイルを開くとテスト成功する。
<html> <head> <title>ITSkillクラスのテスト</title> </head> <body> <script type="text/javascript" src="../scriptaculous/lib/prototype.js"></script> <script type="text/javascript" src="test/unittest.js"></script> <script type="text/javascript" src="test/TestITSkill.js"></script> <script type="text/javascript" src="ITSkill.js"></script> </body> </html>
ITスキルを表しているクラスのテストOK : JavaOK : rankAOK : rankBOK : rankBtotal : 4 success, 0 failed