web-dev-qa-db-ja.com

同じプロジェクトでのEclipse JUnitテスト

これは比較的未解決の問題です。 Eclipseのプロジェクトでアプリケーションをビルドし、このプロジェクトをテストする場合、同じプロジェクト内でJUnitコードを作成するか、別のプロジェクトを作成する必要があります。例えば...

ShopSystem多分私のメインプロジェクトの名前-たとえばShopSystemTestというプロジェクトを作成する必要がありますか?

一般的に-メインプロジェクトフォルダーからテストコードをどこまで保存する必要がありますか?メインプロジェクト内にテストコードを保存してから、メインプロジェクトを実行可能なjarとしてエクスポートすると、テストコードが必要になりますが、これは理想的ではありません...

提案?

54
david99world

唯一の正しい方法はありませんが、通常のアプローチは同じプロジェクトで単体テストを維持することです。

2番目のソースフォルダー(testなど)を作成できます。このフォルダーでは、テストクラスをテスト対象のクラスと同じパッケージに配置します。これにより、メインソースパッケージをテストクラスであふれさせることなく、パッケージプライベートクラスをテストすることもできます。

ソースフォルダー/パッケージ構造は次のようになります。

-sources
   -main
       -my.package
             -MyClass.Java
   -test
       -my.package
             -MyClassTest.Java

その後、JARをパックするときにtestソースフォルダーを含まないようにビルドを構成できます。

67
Henning

私はMavenの規約が大好きです。同じプロジェクトのメインとテストに別々のソースツリーがあり、メインコードがデプロイされますが、テストコードはそうではありません。パッケージ構造は同一である場合があります(必ずしもそうである必要はありません)。

project
    src
        main
             Java      // source files
             resources // xml, properties etc
        test
             Java      // source files
             resources // xml, properties etc

Eclipseでnew -> JUnit test caseを選択すると、ソースフォルダーをsrc/test/Javaに変更し、提案されたパッケージをそのまま残します。

(同じパッケージにとどまることの利点の1つは、保護されたパッケージスコープメンバーにアクセスできることですが、これは「適切な」単体テストの動作ではありません)


更新:私の最後のポイントを説明するためのコードを次に示します。

メインクラス(src/main/Java内):

package com.test;
public class Foo{

    static class Phleem{
        public Phleem(final String stupidParameter){
        }
    }

    String bar;
    protected String baz;
    protected Object thingy;

}

テストクラス(src/test/Java内):

package com.test;
import org.junit.Test;

public class FooTest{

    @Test
    public void testFoo(){
        final Foo foo = new Foo();
        foo.bar = "I can access default-scoped members";
        foo.baz = "And protected members, too";
        foo.thingy = new Foo.Phleem("And I can access default-scoped classes");
    }

}
21

通常、あなたが持っている-

/src/main/Java   (for codes)

/src/test/Java   (for tests)
5
fastcodejava

Mavenの方法を検討してください:Mavenプロジェクトでは、ソースはこのように編成されます

src
 |--main
 |     |--Java
 |--test
       |--Java

ソースコードはsrc/main/Javaに配置され、junitテストコードはsrc/test/Javaに配置され、両方ともソースフォルダーになります(その結果、jUnitコードをJavaコードですが、別のソースフォルダーにあります)。

興味深いのは、通常のコーディングでは、jUnitクラスはコードパッケージにありますが、jarの作成では、テストをリリースせずにsrc/main/Javaからのみのクラスを取得できることです。

4
Riduidel