【コラム】
Java SE 5.0 TigerのコアAPIで使用されているアノテーションは@Deprecatedを含めてもほとんどない。このため、アノテーションがもたらす効果を体験するには、自分で処理を実装するか、コアAPI以外のプロダクトを参考にする必要がある。
そこで前回TestNGを取り上げ、アノテーションの使用例を紹介した。前回は駆け足で説明したため、今回は前回取り上げたアノテーションの使用例を、より詳しく説明しよう。
前回の説明で使用したソースコードからアノテーションを取り除くと、リスト1のようになる。この場合、doSomething()が処理を行うメソッド、testA()およびtestB()が試験を行うメソッドだ。テストドリブンの場合はこの限りではないが、リスト1を処理の視点から本質的に捉えるとすればdoSomething()が実装されていればよく、testA()およびtestB()は必要がなければ記述すらなくてもよいといえる。
C言語であればリスト2のように#ifdef DEBUGといった典型的な記述をするところだ。Javaではマクロプロセッサを使用しないため、リスト2のようには記述しない。同様の処理をするためにJava SE 1.4までの方法なら、メソッド内に試験コードを実行するか否かの判定処理を入れるか、assertを使って実行の有無を制御するところだ。
テストコードをif文で記述するにしろ、assertで記述するにしろ、継承や委譲で実現するにしろ、大規模システムに組み込むとなると、一貫したテストフレームワークが必要になる。つねにフルテストコードを実行するといった方法でもよいが、特定のモジュールの特定の試験を行いたかったり指定する条件を変更したいなど、なにかと汎用的なフレームワークが必要だ。
これまでのテストフレームワーク、つまりアノテーションが使えないテストフレームワークではアノテーションが使えないため、アノテーション以外の方法で実現していた。
テストフレームワークでアノテーションを使おうという発想は、まさにその実装をもっと簡単にしようという点にある。テストはあくまでテストであり、処理という視点からみた場合の本質的なソースコードではないので、できるだけ簡単に記述しておきたいというのは的を射た発想だ。
そこで、アノテーションを使ったテストフレームワームであるTestNGを使った例がリスト3のようになる。@Testというアノテーションが追加されており、値としてそれぞれgroupsにaとbが設定されている。
@Testというアノテーションは、TestNGによって処理の対象となるメソッドになる。TestNGは@Testが指定されているメソッドをテスト用のメソッドであるとみなし、処理を実行する対象とする。
ここで注目するべきなのは、アノテーションは追加されているが、本来の処理には手を加えていないということだ。テストを行うためにif文を挿入したりassertを使うといったことは行っていない。アノテーションでテストに使用するメソッドを指定しているため、外部の設定ファイルで設定を行っているというわけでもない。
気を配っていないとアノテーションがもたらす効果を見逃してしまう。これだけのことが、大きな効果をもたらしていることがわかるだろう。アノテーションでマーキングするだけで、テストに関する煩雑な処理を外部の処理系に取り出すことに成功している。その際、Java SE 1.4以前までに必要だったような実装は必要なく、ただ@Testの行を追加するだけだ。
とくに重要な点は、Javaの処理に関するソースコードにはいっさい手を加えていないことだ。さながらCのマクロのように、そこにアノテーションが挿入されている。アノテーションもまた万能薬というものではないが、適切に使えばかなりの効果をあげることができる好例といえるだろう。
【コラム】ダイナミックObjective-C 第18回 メソッドとは何か(1) - メソッド、セレクタ、メソッドの実装
【コラム】ダイナミックObjective-C 第17回 クラスとは何か(4) - Objective-Cにおけるオブジェクトとは何か?
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【ネタバレもありの徹底解明コラム】『サザエさん』タマの意外な事実 [17:30 5/27] ホビー |
|
鍼灸(しんきゅう)師が教える。オフィスで口臭予防ツボ・ベスト3 [17:00 5/27] キャリア |
|
[梶浦由記]米「アニメ・エキスポ」に2度目の参加決定 [17:00 5/27] ホビー |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第107回 今回のお題は…「chemical」 [17:00 5/27] キャリア |
|
[乃木坂46]キャプテン桜井が“ライバル”AKB総選挙予想 1位まゆゆ、2位はさしこ、3位たかみな [16:58 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。