これは比較的未解決の問題です。 Eclipseのプロジェクトでアプリケーションをビルドし、このプロジェクトをテストする場合、同じプロジェクト内でJUnitコードを作成するか、別のプロジェクトを作成する必要があります。例えば...
ShopSystem
多分私のメインプロジェクトの名前-たとえばShopSystemTest
というプロジェクトを作成する必要がありますか?
一般的に-メインプロジェクトフォルダーからテストコードをどこまで保存する必要がありますか?メインプロジェクト内にテストコードを保存してから、メインプロジェクトを実行可能なjarとしてエクスポートすると、テストコードが必要になりますが、これは理想的ではありません...
提案?
唯一の正しい方法はありませんが、通常のアプローチは同じプロジェクトで単体テストを維持することです。
2番目のソースフォルダー(test
など)を作成できます。このフォルダーでは、テストクラスをテスト対象のクラスと同じパッケージに配置します。これにより、メインソースパッケージをテストクラスであふれさせることなく、パッケージプライベートクラスをテストすることもできます。
ソースフォルダー/パッケージ構造は次のようになります。
-sources
-main
-my.package
-MyClass.Java
-test
-my.package
-MyClassTest.Java
その後、JARをパックするときにtest
ソースフォルダーを含まないようにビルドを構成できます。
私は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");
}
}
通常、あなたが持っている-
/src/main/Java (for codes)
/src/test/Java (for tests)
Mavenの方法を検討してください:Mavenプロジェクトでは、ソースはこのように編成されます
src
|--main
| |--Java
|--test
|--Java
ソースコードはsrc/main/Javaに配置され、junitテストコードはsrc/test/Javaに配置され、両方ともソースフォルダーになります(その結果、jUnitコードをJavaコードですが、別のソースフォルダーにあります)。
興味深いのは、通常のコーディングでは、jUnitクラスはコードパッケージにありますが、jarの作成では、テストをリリースせずにsrc/main/Javaからのみのクラスを取得できることです。