【コラム】

ライトニングJava

29 アノテーション(4) - 採用事例 TestNG(1)

    後藤大地  [2005/12/06]

    Java SE 5.0 TigerのコアAPIで使用されているアノテーションは@Deprecatedを含め、必要最小限なものでしかない。アノテーションを使ったプログラミングをおこなうには、アノテーションタイプを作成し、アノテーションを処理するクラスを作成しなければならない。標準でより多くのアノテーションが用意されるのは、次期リリースが予定されているJava EE 5.0やJava SE 6.0 Mustang、Java SE 7.0 Dolphin以降になる見通しだ。

    アノテーションを使ってどのようなことができるのか、アノテーションがもたらす効果はどういったものなのかといったことは、採用事例を見ていく方法が一番効果的だ。Java SE 5.0 Tigerに用意されているコアAPIではアノテーションが活用されていないため、コアAPI以外にいくつかのアプリケーションを取り上げて、それらが実装しているアノテーションの効果を紹介していく。

    TestNG

    JavaのテストフレームワークのひとつにTestNGがある。有名なテストフレームワークとしてはほかに JUnitやNUnitがある。なかでもJUnitが有名で、実質的にデファクトスタンダードの立場にある。しかしJUnitは、バージョンアップとともに複雑になりすぎてしまった。この事実に対するアンチテーゼとして開発されたテストフレームワークがTestNGである。

    システム規模が大きくなればなるほど、テストフレームワークの導入は欠かせないものになる。テストフレームワークを導入し試験工程を自動化することによって、テストにかかる手間を大幅に削減することができる。

    試験工程自身はソースコードに対して横断的に実施したい内容だから、手法としてはアスペクト指向的な取り組みになる。本来のコードには影響を与えることなく、試験コードを挿入したいということだ。TestNGではその仕組みの要としてアノテーションを使っている。実際の例を通して、どのようにアノテーションが使用されているかをみていこう。

    TestNG インストール

    本稿では、11月29日(米国時間)に公開されたTestNG version 4.3を使用する。TestNGの最新版はTestNGのサイトからダウンロードすることができる。

    ダウンロードしたファイルを展開すると、testng-4.3-jdk15.jarおよびtestng-4.3-jdk14.jarといったjarファイルが現われる。それぞれJava 5.0用およびJava 1.4用のjarファイルだ。

    本稿ではJava SDK 5.0を使った例を紹介する。TestNGはSDK以外にも、Eclipse、IDEA、Maven、Antなどと統合して使用することができる。統合開発環境やビルドツールとともに使用する方法はTestNGのドキュメントをご覧いただきたい。

    使用例

    TestNGテストフレームワークの簡単な使用例をTestExample.javaに示す。試験を行うメソッドとしてtestAおよびtestBが用意されている。そしてそれらのメソッドにはそれぞれaおよびbという値が設定されている。

    リスト1 TestExample.java

    import org.testng.annotations.Test;

    public class TestExample
    {
        public void doSomething()
        {
            // do something
        }

        @Test(groups={"a"})
        public void testA()
        {
            // do test A
        }

        @Test(groups={"b"})
        public void testB()
        {
            // do test B
        }
    }

    従来のテストフレームワークであれば、試験用のメソッドを実装するか継承するか、または外部の設定ファイルにおいて試験用のメソッドを明示する必要があった。TestNGはアノテーションを活用することでこれを簡素化している。基本的には@Test アノテーションを指定しておけば、対象のメソッドは試験用のメソッドとしてTestNGによって扱われるようになる。

    メソッドを実行する順序、事前に実行していく必要があるメソッドの指定や、試験メソッドの動作タイミングなども、同様にしてアノテーションで記述できる。動作を設定ファイルに分離する方法や、インタフェースを継承する方法、クラスを継承する方法に比べて、アノテーションを使う方法は簡単でわかりやすい。

    ちなみに試験工程の実行結果はリスト2のようになる。TestNGは試験結果をtest-outputというディレクトリにHTMLファイルとして作成する。作成されたHTMLファイルの例を図1に示す。

    リスト2

    % make run
    javac -cp testng-4.3-jdk15.jar TestExample.java
    java -cp .:testng-4.3-jdk15.jar org.testng.TestNG testng.xml

    ===============================================
    Example
    Total tests run: 2, Failures: 0, Skips: 0
    ===============================================
    %

    図1 TestNG 試験報告結果

    使ってみると、実に簡単なことがわかる。もし同様の作業をアノテーションを使わずに行うとすると、従来のJavaの規則に従った複雑なものになるか、または言語的な保証はなくなるが、制約を順守するというプログラマの行動に信頼をおいた仕組みにするかのどちらかになる。アノテーションを使うと、言語的に動作を保証しつつ、簡単に手段を提供できていることがわかる。

    成果物、ほか

    TestNGの使い方を紹介する連載ではないため、説明は省くが、上記実行結果を得るために使ったファイルを示しておく。

    TestNGは統合開発環境やビルドツールと連携して使うこともできるし、それ単体で使うこともできる。リスト3は単体で使用する場合の方法をまとめたMakefileだ。コマンドラインオプションで動作させる方法と、XML設定ファイルを使用する場合の両方をまとめてある。

    リスト3 Makefile

    # $Id: Makefile,v 1.1 2005/12/05 08:00:53 daichi Exp $

    build:
        env JAVA_HOME=/usr/local/jdk1.5.0 /usr/local/jdk1.5.0/bin/javac \
            -cp testng-4.3-jdk15.jar \
            TestExample.java

    clean:
        rm *.class

    run: run-with-xml

    run-with-xml: build
        env JAVA_HOME=/usr/local/jdk1.5.0 /usr/local/jdk1.5.0/bin/java \
            -cp .:testng-4.3-jdk15.jar \
            org.testng.TestNG testng.xml

    run-with-opts: build
        env JAVA_HOME=/usr/local/jdk1.5.0 /usr/local/jdk1.5.0/bin/java \
            -cp .:testng-4.3-jdk15.jar \
            org.testng.TestNG \
                -testclass TestExample.class \
                -groups a,b

    testng-opts:
        env JAVA_HOME=/usr/local/jdk1.5.0 /usr/local/jdk1.5.0/bin/java \
            -jar testng-4.3-jdk15.jar

    リスト4がXML 設定ファイルを使用する場合のXML設定ファイルの例だ。ここではa, bともに使用する場合の例を掲載してある。XML設定ファイルで注意するべきは、groupsとclasses要素に順序があるということだ。 classes用途よりも前にgroups用途を書いておかなければならない。これは実装上のバグというかただ実装していないだけだと思うが、 TestNG version 4.3には存在する点なので注意しておこう。

    リスト4 testng.xml

    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

    <suite name="Example" >
      <test name="Full test" >
        <groups>
          <run>
            <include name="a" />
            <include name="b" />
          </run>
        </groups>
        <classes>
          <class name="TestExample" />
        </classes>
      </test>
    </suite>

    端的にまとめれば、メソッドに@Testを指定しておけば、TestNGによる試験工程を実現できる、ということになる。アノテーションの簡単な使用例だが、どのように使用されているかというよい一例である。

    提供:毎日就職ナビ

    会員登録はこちら

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

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

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

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

      Heroes File ~挑戦者たち~

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

      はじめての転職診断

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

      転職Q&A

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

      スカウト転職する

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

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