gpt4 book ai didi

java - 运行测试时 Ant + JUnit = ClassNotFoundExceptions?

转载 作者:搜寻专家 更新时间:2023-11-01 01:58:23 25 4
gpt4 key购买 nike

我正在尝试使用 JUnit 在 Ant 中运行一些测试,但我的所有测试都失败了,堆栈跟踪如下:

java.lang.ClassNotFoundException: com.mypackage.MyTestCase

这对我来说意义不大。我首先使用 <javac> 编译我的测试用例, 然后直接运行 <junit>运行测试的任务。我的构建文件如下所示:

<target name="compile.webapp.tests" depends="compile.webapp">
<javac srcdir="${test.java.src.dir}"
destdir="${test.java.bin.dir}">
<classpath>
<filelist>
<file name="${red5.home}/red5.jar"/>
<file name="${red5.home}/boot.jar"/>
<file name="${bin.dir}/${ant.project.name}.jar"/>
</filelist>
<fileset dir="${red5.lib.dir}" includes="**/*"/>
<fileset dir="${main.java.lib.dir}" includes="**/*"/>
<fileset dir="${test.java.lib.dir}" includes="**/*"/>
</classpath>
</javac>
</target>

<target name="run.webapp.tests" depends="compile.webapp.tests">
<junit printsummary="true">
<classpath>
<filelist>
<file name="${red5.home}/red5.jar"/>
<file name="${red5.home}/boot.jar"/>
<file name="${bin.dir}/${ant.project.name}.jar"/>
</filelist>
<fileset dir="${red5.lib.dir}" includes="**/*.jar"/>
<fileset dir="${main.java.lib.dir}" includes="**/*.jar"/>
<fileset dir="${test.java.lib.dir}" includes="**/*.jar"/>
<fileset dir="${test.java.bin.dir}" includes="**/*.class"/>
</classpath>

<formatter type="xml"/>

<batchtest todir="${test.java.output.dir}">
<fileset dir="${test.java.bin.dir}" includes="**/*TestCase*"/>
</batchtest>
</junit>

<junitreport>
<fileset dir="${test.java.output.dir}" includes="**/*"/>
<report todir="${test.java.report.dir}"/>
</junitreport>
</target>

这真的很奇怪,我似乎无法解决这个问题。我在这里做错了什么吗?我项目的目录布局看起来有点像这样:

${basedir}/src/test/java # this is "test.java.src.dir"
${basedir}/build/test/java # this is "test.java.bin.dir"
${basedir}/lib/main/java # this is "main.java.lib.dir"
${basedir}/lib/test/java # this is "test.java.lib.dir"
${basedir}/build/test/junit # this is "test.java.output.dir"

我的完整构建文件可在此处获得:http://pastebin.com/SVnciGKR
我的属性文件可在此处获得:http://pastebin.com/9LCtNQUq


更新

通过将我的目标修改为如下所示,我能够让事情正常进行。不幸的是,我必须手动将 ant-junit.jar 和 junit.jar 嵌入到我的存储库中,但它有效,所以我想这可以解决它。如果有人可以帮助我摆脱嵌入 ant-junit.jar 和 junit.jar 的需要,我将不胜感激:

<path id="webapp.tests.path" >
<pathelement location="${red5.home}/red5.jar"/>
<pathelement location="${red5.home}/boot.jar"/>
<pathelement location="${bin.dir}/${ant.project.name}.jar"/>
<pathelement path="${red5.lib.dir}"/>
<pathelement path="${main.java.lib.dir}"/>
<pathelement path="${test.java.lib.dir}"/>
</path>

<target name="compile.webapp.tests" depends="compile.webapp">
<javac srcdir="${test.java.src.dir}"
destdir="${test.java.bin.dir}">
<classpath refid="webapp.tests.path"/>
</javac>
</target>

<target name="run.webapp.tests" depends="compile.webapp.tests">
<junit printsummary="true">
<classpath>
<path refid="webapp.tests.path"/>
<pathelement location="${test.lib.dir}/ant/ant-junit.jar"/>
<pathelement location="${test.lib.dir}/ant/junit-4.8.2.jar"/>
<pathelement path="${test.java.bin.dir}"/>
</classpath>

<formatter type="xml"/>

<batchtest todir="${test.java.output.dir}">
<fileset dir="${test.java.bin.dir}" includes="**/*TestCase*"/>
</batchtest>
</junit>

<junitreport todir="${test.java.report.dir}">
<fileset dir="${test.java.output.dir}" includes="**/*"/>
<report todir="${test.java.report.dir}"/>
</junitreport>

<delete file="${test.java.report.dir}/TESTS-TestSuites.xml"/>
</target>

如果我不在类路径中包含 jar,我会收到错误消息,告诉我 junit.jar 必须在类路径中才能运行 <junit>任务。很奇怪吧?

最佳答案

根据 JUnit Task 的 ANT 文档您必须执行以下选项之一才能运行 junit 测试,因为它依赖于 ANT 外部的 junit.jar:

Note: You must have junit.jar available. You can do one of:

  1. Put both junit.jar and ant-junit.jar in ANT_HOME/lib.
  2. Do not put either in ANT_HOME/lib, and instead include their locations in your CLASSPATH environment variable.
  3. Add both JARs to your classpath using -lib.
  4. Specify the locations of both JARs using a element in a in the build file.
  5. Leave ant-junit.jar in its default location in ANT_HOME/lib but include junit.jar in the passed to <junit>. (since Ant 1.7)

我已经验证#1,将 junit.jar 放在 ANT_HOME\lib 中有效(ant-junit.jar 已经存在,ANT 1.8.0)并且我不需要指定一个 junit JUNIT 标记的类路径中的 .jar。本质上,您选择了选项 #5。

关于java - 运行测试时 Ant + JUnit = ClassNotFoundExceptions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2686226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com