ページ更新: 2003-12-14 (日) (5577日前)

2004-09-08

Javaの自動テストコードのディレクトリへの配置について

[編集]

目次 #

[編集]

資料 #

  • sun, ObjectClubのコーディング規約
  • Apache Commons の最近のディレクトリ配置
[編集]

前提条件 #

  • テストコードのクラス名は 末尾に Test をつける。
  • 単体テストコードは「対象クラス名」+Test とする。
  • TestSuite は AllTests とする。(eclipse が自動生成、半自動メンテナンスする)
  • テストコードは、テスト対象クラスと同一のパッケージに格納する。
[編集]

1. ソース、バイナリとも、同じディレクトリに配置する場合 #

  [src]
    + [aaa]
       AllTests.java        (aaa.AllTests) .............. 自動テストスィート
       + [bbb]
          + [ccc]
             Ddd.java       (aaa.bbb.cc.Ddd) ............ テスト対象クラス
             DddTest.java   (aaa.bbb.ccc.DddTest) ....... 自動テスト
             AllTests.java  (aaa.bbb.ccc.AllTests) ...... 自動テストスィート
  [classes]
    + [aaa]
       AllTests.class       (aaa.AllTests) .............. 自動テストスィート
       + [bbb]
          + [ccc]
             Ddd.class      (aaa.bbb.cc.Ddd) ............ テスト対象クラス
             DddTest.class  (aaa.bbb.ccc.DddTest) ....... 自動テスト
             AllTests.class (aaa.bbb.ccc.AllTests) ...... 自動テストスィート
[編集]

デメリット #

  • 同じディレクトリにあるので、煩雑になる。
  • jar にまとめるとき、テストコードを除外する必要がある。 (Antの記述が面倒になる)
[編集]

メリット #

  • 同じディレクトリにあるので、テストコードをすぐに開ける
  • 同じディレクトリにあるので、存在がすぐにわかる
  • eclipse 2.1.3 のリファクタリングが失敗しない。
  • リファクタリングで、クラスを別のパッケージに移動するとき、テストコードも一緒に移動しやすい。
[編集]

2. ソースを別ディレクトリに、バイナリを同一ディレクトリに配置する場合 #

  [src]
    + [dist]
       + [aaa]
          + [bbb]
             + [ccc]
                Ddd.java      (aaa.bbb.cc.Ddd)   .......... テスト対象クラス
    + [test]
       + [aaa]
          AllTests.java       (aaa.AllTests) .............. 自動テストスィート
          + [bbb]
             + [ccc]
                DddTest.java  (aaa.bbb.ccc.DddTest) ....... 自動テスト
                AllTests.java (aaa.bbb.ccc.AllTests) ...... 自動テストスィート
  [classes]
    + [aaa]
       AllTests.class         (aaa.AllTests) .............. 自動テストスィート
       + [bbb]
          + [ccc]
             Ddd.class        (aaa.bbb.cc.Ddd) ............ テスト対象クラス
             DddTest.class    (aaa.bbb.ccc.DddTest) ....... 自動テスト
             AllTests.class   (aaa.bbb.ccc.AllTests) ...... 自動テストスィート
[編集]

デメリット #

  • 別のディレクトリにあるので、テストコードの存在がわかりにくい。
  • 別のディレクトリにあるので、テストコードを開きにくい。 (eclipse であれば、QuickJUnit プラグインを使えばよい)
  • jar にまとめるとき、テストコードを除外する必要がある。 (Antの記述が面倒になる)
  • eclipse 2.1.3 のリファクタリングが失敗するときがある。 ([src/test]階層だけリファクタリングから除外されることがある)
  • リファクタリングで、クラスを別のパッケージに移動するとき、テストコードも一緒に移動するのが面倒だし、 移動を忘れることもある(エラーが発生するが)
[編集]

メリット #

  • 別のディレクトリにあるので、見やすい。
[編集]

3. ソース、バイナリとも、違うディレクトリに配置する場合 #

  [src]
    + [dist]
       + [aaa]
          + [bbb]
             + [ccc]
                Ddd.java      (aaa.bbb.cc.Ddd)   ....... テスト対象クラス
    + [test]
       + [aaa]
          AllTests.java       (aaa.AllTests) ........... 自動テストスィート
          + [bbb]
             + [ccc]
                DddTest.java  (aaa.bbb.ccc.DddTest) .... 自動テスト
                AllTests.java (aaa.bbb.ccc.AllTests) ... 自動テストスィート
  [classes]
    + [dist]
       + [aaa]
          + [bbb]
             + [ccc]
                Ddd.java      (aaa.bbb.cc.Ddd)   ....... テスト対象クラス
    + [test]
       + [aaa]
          AllTests.java       (aaa.AllTests) ........... 自動テストスィート
          + [bbb]
             + [ccc]
                DddTest.java  (aaa.bbb.ccc.DddTest) .... 自動テスト
                AllTests.java (aaa.bbb.ccc.AllTests) ... 自動テストスィート
[編集]

デメリット #

  • クラスパスの設定が面倒。コマンドライン上で簡単にテストできない。 (バッチファイルやAntで用意すればよい)
  • 別のディレクトリにあるので、テストコードの存在がわかりにくい。
  • 別のディレクトリにあるので、テストコードを開きにくい。 (eclipse であれば、QuickJUnit プラグインを使えばよい)
  • eclipse 2.1.3 のリファクタリングが失敗するときがある。 ([src/test]階層だけリファクタリングから除外されることがある)
  • リファクタリングで、クラスを別のパッケージに移動するとき、テストコードも一緒に移動するのが面倒だし、 移動を忘れることもある(エラーが発生するが)
[編集]

メリット #

  • 別のディレクトリにあるので、見やすい。
  • jar にまとめるとき、テストコードを除外しなくてよい。