わかりました、私はイライラしています!私は何時間も探し回りましたが、まだ困惑しています。
環境: WinXP、Eclipse Galileo 3.5 (直接インストール - 追加のプラグインなし)。
したがって、簡単な JUnit テストがあります。内部のEclipse JUnit実行構成から正常に実行されます。このクラスは何にも依存していません。この問題を可能な限り絞り込むために、次のものが含まれています。
@Test
public void testX() {
assertEquals("1", new Integer(1).toString());
}
ここまで汗なし。ここで、Ant 内からこのテスト ケースを実行するという非常に高度な手順を実行したいと思います (最終的な目標は、Hudson と統合することです)。
そこで、build.xml を作成します。
<project name="Test" default="basic">
<property name="default.target.dir" value="${basedir}/target" />
<property name="test.report.dir" value="${default.target.dir}/test-reports" />
<target name="basic">
<mkdir dir="${test.report.dir}" />
<junit fork="true" printSummary="true" showOutput="true">
<formatter type="plain" />
<classpath>
<pathelement path="${basedir}/bin "/>
</classpath>
<batchtest fork="true" todir="${test.report.dir}" >
<fileset dir="${basedir}/bin">
<include name="**/*Test.*" />
</fileset>
</batchtest>
</junit>
</target>
</project>
${basedir} は、ソース、クラス、およびビルド ファイルを含むワークスペース内の Java プロジェクト名です。すべての .java と build.xml は ${basedir}/src にあります。.class ファイルは ${basedir}/bin にあります。
Windows / Preferences / Ant / Runtime / Contributed Entries を介して eclipse-install-dir/plugins/org.junit4_4.5.0.v20090423/junit.jar を Ant ランタイム クラスパスに追加しました。ant-junit.jar は Ant Home Entries にあります。
では、この非常に複雑なターゲットを実行するとどうなるでしょうか? 私のレポートファイルには以下が含まれています:
Testsuite: com.xyz.test.RussianTest
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
Testcase: initializationError took 0 sec
Caused an ERROR
org/hamcrest/SelfDescribing
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
この org.hamcrest.SelfDescribing クラスとは何ですか? モックと何か関係がありますか?いいよ。しかし、なぜ依存関係があるのですか?私はそれで何もしていません。これは文字通り、JUnit 以外に依存関係のない Java プロジェクトです。
困った(そしてイライラした)!!