私はしばらくの間、これについて頭を悩ませてきました。Stack Overflow の関連するすべての投稿と、Google で見つけた投稿を見てきましたが、役に立ちませんでした。
Mancala.java をメイン クラスとする Java プログラムを構築しようとしています。ディレクトリ構造は次のとおりです。mancala というフォルダに、test というサブフォルダが 1 つと mancala_test というサブフォルダが 1 つあります。test フォルダーには Mancala.java ファイルとその他のファイルがあり、mancala_test フォルダーには MancalaTest.java という JUnit テスト ファイルが含まれています。Eclipse ではテスト ファイルが実行されますが、Ant 経由で実行すると次のエラーが発生します。
init:
compile:
[javac] Compiling 6 source files to C:\Users\[me]\Desktop\build
runjunit:
[junit] Running mancala_test.MancalaTest
[junit] Testsuite: mancala_test.MancalaTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
[junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
[junit]
[junit] Caused an ERROR
[junit] mancala_test.MancalaTest
[junit] java.lang.ClassNotFoundException: mancala_test.MancalaTest
[junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
[junit] at java.lang.Class.forName0(Native Method)
[junit] at java.lang.Class.forName(Class.java:266)
[junit]
[junit] Test mancala_test.MancalaTest FAILED
BUILD SUCCESSFUL
Total time: 1 second
mancala フォルダーで次のビルド ファイルを使用しています。
<project default="runjunit" name="Compile and run JUnit tests">
<target name="clean">
<delete dir="build"/>
</target>
<target name="clean2">
<delete dir="build"/>
</target>
<target name="init">
<record name="build.log" loglevel="verbose" append="false"/>
</target>
<target name="runjunit" depends="compile">
<junit printsummary="on">
<test name="mancala_test.MancalaTest"/>
<classpath>
<pathelement location="build"/>
</classpath>
<formatter
type="plain"
usefile="false"
/>
</junit>
</target>
<target name="compile" depends="init">
<mkdir dir="build"/>
<javac includeantruntime="false" srcdir="./test" destdir="build"/>
</target>
</project>
その他の考えられる関連情報としては、Mancala.java ファイルに GUI と Mancala クラス自体の 2 つの静的イニシャライザが含まれていることです (たとえば、静的 Mancala mancala; 静的 GUI gui; Mancala_test.java は単に Mancala mancala = new Mancala() オブジェクトを使用します)。各テストで。
1 つのテストの例:
@Test
public void testAmountOfSeed() {
Mancala mancala = new Mancala();
mancala.divideBoard();
int totalAmountOfSeed = 0;
for (int i = 0; i < mancala.gameBoard.size(); i++) {
totalAmountOfSeed +=mancala.gameBoard.get(i).getSeed();
}
assertTrue("Total amount of seed in initial condition not 48!", totalAmountOfSeed == 48);
}
おそらく、クラスパス(考えられるすべてのバリエーションを試しました)または静的なものと関係があります。誰かが私を悲惨な状態から救ってくれたら、とてもありがたいです。
/edit ビルド後のディレクトリ構造: http://i.imgur.com/vvFJtNB.png