【コラム】

ライトニングJava

30 アノテーション(5) - 採用事例 TestNG(2)

    後藤大地  [2005/12/12]

    Java SE 5.0 TigerのコアAPIで使用されているアノテーションは@Deprecatedを含めてもほとんどない。このため、アノテーションがもたらす効果を体験するには、自分で処理を実装するか、コアAPI以外のプロダクトを参考にする必要がある。

    そこで前回TestNGを取り上げ、アノテーションの使用例を紹介した。前回は駆け足で説明したため、今回は前回取り上げたアノテーションの使用例を、より詳しく説明しよう。

    対象としているソースコード

    前回の説明で使用したソースコードからアノテーションを取り除くと、リスト1のようになる。この場合、doSomething()が処理を行うメソッド、testA()およびtestB()が試験を行うメソッドだ。テストドリブンの場合はこの限りではないが、リスト1を処理の視点から本質的に捉えるとすればdoSomething()が実装されていればよく、testA()およびtestB()は必要がなければ記述すらなくてもよいといえる。

    リスト1 TestExample.java - 説明の対象とするソースコード

    public class TestExample {
        public void doSomething() { }

        public void testA() { }

        public void testB() { }
    }

    C言語であればリスト2のように#ifdef DEBUGといった典型的な記述をするところだ。Javaではマクロプロセッサを使用しないため、リスト2のようには記述しない。同様の処理をするためにJava SE 1.4までの方法なら、メソッド内に試験コードを実行するか否かの判定処理を入れるか、assertを使って実行の有無を制御するところだ。

    リスト2 C言語ならこんな風になる

    void doSomething() {
    }

    ...

    #ifdef DEBUG_A
        /* void testA() */
        ...
    #endif

    #ifdef DEBUG_B
        /* void testB() */
        ...
    #endif

    テストフレームワーク

    テストコードをif文で記述するにしろ、assertで記述するにしろ、継承や委譲で実現するにしろ、大規模システムに組み込むとなると、一貫したテストフレームワークが必要になる。つねにフルテストコードを実行するといった方法でもよいが、特定のモジュールの特定の試験を行いたかったり指定する条件を変更したいなど、なにかと汎用的なフレームワークが必要だ。

    これまでのテストフレームワーク、つまりアノテーションが使えないテストフレームワークではアノテーションが使えないため、アノテーション以外の方法で実現していた。

    テストフレームワークでアノテーションを使おうという発想は、まさにその実装をもっと簡単にしようという点にある。テストはあくまでテストであり、処理という視点からみた場合の本質的なソースコードではないので、できるだけ簡単に記述しておきたいというのは的を射た発想だ。

    アノテーションの使用

    そこで、アノテーションを使ったテストフレームワームであるTestNGを使った例がリスト3のようになる。@Testというアノテーションが追加されており、値としてそれぞれgroupsにaとbが設定されている。

    @Testというアノテーションは、TestNGによって処理の対象となるメソッドになる。TestNGは@Testが指定されているメソッドをテスト用のメソッドであるとみなし、処理を実行する対象とする。

    リスト3 TestExample.java - アノテーション

    public class TestExample {
        public void doSomething() { }

        @Test(groups={"a"})
        public void testA() { }

        @Test(groups={"b"})
        public void testB() { }
    }

    ここで注目するべきなのは、アノテーションは追加されているが、本来の処理には手を加えていないということだ。テストを行うためにif文を挿入したりassertを使うといったことは行っていない。アノテーションでテストに使用するメソッドを指定しているため、外部の設定ファイルで設定を行っているというわけでもない。

    アノテーションの効果

    気を配っていないとアノテーションがもたらす効果を見逃してしまう。これだけのことが、大きな効果をもたらしていることがわかるだろう。アノテーションでマーキングするだけで、テストに関する煩雑な処理を外部の処理系に取り出すことに成功している。その際、Java SE 1.4以前までに必要だったような実装は必要なく、ただ@Testの行を追加するだけだ。

    とくに重要な点は、Javaの処理に関するソースコードにはいっさい手を加えていないことだ。さながらCのマクロのように、そこにアノテーションが挿入されている。アノテーションもまた万能薬というものではないが、適切に使えばかなりの効果をあげることができる好例といえるだろう。

    提供:毎日就職ナビ

    会員登録はこちら

    学生のための就職情報サイト「毎日就職ナビ」。4,000社以上の新卒採用情報が常時掲載され、社内の雰囲気が伝わる情報画面、さまざまな項目での会社検索、エントリーや説明会検索など、機能も充実。無料適職診断、就活Q & A、エントリーシート添削講座など、就職活動に役立つ記事も満載です。研究者、エンジニアを目指す学生の方々も是非エントリーしてください。お待ちしています!

    毎日コミュニケーションズ 就職情報事業本部はプライバシーマークを取得しています。

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン