一段时间以来,我一直在为此挠头。我一直在查看 Stack Overflow 上的所有相关帖子以及我可以通过 Google 找到的帖子,但无济于事。
我正在尝试构建一个以 Mancala.java 作为主类的 Java 程序。目录结构如下:一个名为 mancala 的文件夹,一个名为 test 的子文件夹和一个名为 mancala_test 的子文件夹。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 类本身(例如,静态 Mancala mancala;静态 GUI gui;并且 Mancala_test.java 仅使用 Mancala mancala = new Mancala() 对象在每次测试中。
一个测试的例子:
@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