当前位置: 首页 > 面试题库 >

运行junit任务时Bamboo Ant任务失败

徐卓
2023-03-14
问题内容

在我当前的项目中,我正在使用junit测试。在本地PC上运行我的ant文件会生成预期的测试报告,但是当Bamboo尝试运行我的测试时,它将生成以下输出。

我怎么了

SimplerTest.java

import static org.junit.Assert.*;

import org.junit.Test;

public class SimplerTest {


@Test
public void dummerTest()
{
    assertTrue(true);
}
}

本地输出:

Buildfile: C:\Users\jussi\git\kingdom-builder-repository\build.xml

compile-test:
[javac] Compiling 1 source file to C:\Users\jussi\git\kingdom-builder-repository\bin

junit:
    [junit] Running me.jussi.kingdombuilder.SimplerTest
    [junit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0,062 sec

main:

BUILD SUCCESSFUL
Total time: 1 second

服务器输出:

compile-test:
[javac] Compiling 1 source file to /var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/bin

junit:

BUILD FAILED
/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/build.xml:108: Using loader AntClassLoader[/opt/apache-ant-1.9.0/lib/ant-launcher.jar:/opt/ant/lib/ant.jar:/opt/ant/lib/ant-junit.jar:/opt/ant/lib/ant-junit4.jar:/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/kingdom-builder/libs/junit-4.10.jar:/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/bin] 
on class org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter: java.lang.NoClassDefFoundError: junit/framework/TestListener

build.xml

<?xml version="1.0"?>
<project name="KingdomBuild" default="main" basedir=".">
<!-- Sets variables which can later be used. -->
<!-- The value of a property is accessed via ${} -->

<property name="test.src.dir" location="kingdom-builder/test" />
<property name="build.dir" location="bin" />
<property name="test.report.dir" location="testreport" />

<!-- Define the classpath which includes the junit.jar and the classes after compiling-->
<path id="junit.class.path">
    <pathelement location="kingdom-builder/libs/junit-4.10.jar" />
    <pathelement location="${build.dir}" />
</path>

<!-- Compiles the java code (including the usage of library for JUnit -->
<target name="compile-test">
    <javac srcdir="${test.src.dir}" destdir="${build.dir}" includeantruntime="false">
        <classpath refid="junit.class.path" />
    </javac>
</target>


<!-- Run the JUnit Tests -->
<!-- Output is XML, could also be plain-->
<target name="junit" depends="compile-test">
    <junit printsummary="on" fork="true" haltonfailure="true">
        <classpath refid="junit.class.path" />
        <formatter type="xml" />
        <batchtest todir="${test.report.dir}">
            <fileset dir="${build.dir}">
                <include name="**/*Test*.class" />
            </fileset>
        </batchtest>
    </junit>
</target>

<target name="main" depends="junit">
    <description>Main target</description>
</target>
</project>

ant -v输出:

http://nopaste.info/1abdd27a8e.html


问题答案:

感谢详细的Ant输出。

看来您正在Bamboo服务器上运行Ant 1.9.0。Ant错误跟踪器中存在一个已知问题(bug 54835-在junit
ant任务中使用Classpath似乎被破坏了吗?
),该问题由关于SO的类似问题的发布者启动:“
Ant,Ivy和JUnit未找到类 ”
-build.xml错误? ”:

BUILD FAILED
/home/andrew/project/guice/hg/build.xml:33: java.lang.NoClassDefFoundError: junit/framework/TestListener
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
...
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: java.lang.ClassNotFoundException: junit.framework.TestListener
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
...

该问题没有明确/简短的答案,但错误报告包含:

看起来类搜索是委派给系统的类加载器,而不是由Ant类加载器处理(系统类加载器不具有JUnit知识,因为JUnit不在核心Ant类路径上,而是由Ivy添加到JUnit任务中)。鉴于必须已经加载了一些JUnit类才能达到这一点,Ant
Classloader可以看到由Ivy加载的JUnit jar,但是在尝试加载JUnit Runner使用的类时,Split
Classloader似乎是委派了错误。

换句话说:Ant的JUnit任务有错误,将无法正常工作,我想您会受到此特定错误的影响。错误报告将继续,并列出以下修复程序/解决方法:

  • 等待Ant 1.9.1(错误报告被标记为已修复,预计很快就会发布)
  • 将您的JUnit JAR复制到ANTLIB目录中,并继续使用Ant 1.9.0。如果要混合使用JUnit版本,效果不是很好,但是如果您使用的都是4.10左右,它应该可以工作。
  • 使用Ant 1.8.4


 类似资料:
  • 我有以下ant目标: 当我尝试从命令行运行它时,我得到以下输出: 测试在Eclipse Mars(4.5.2)中成功运行。有人知道为什么会发生这种情况,以及我如何让JUnit测试通过ant运行吗?我正在使用JUnit 4.11,并尝试了ant v1.9.3和v1.9.6(以上输出是从ant v1.9.6生成的)。 编辑 根据注释中的建议,我还使用Antv1.8.4进行了测试,但这对导致的崩溃没有任

  • 此任务用于从JUnit测试框架运行测试。 此任务依赖于默认情况下未包含在Apache Ant分发中的外部库。 和都需要运行此任务,因此将这些JAR放在位置:ANT_HOME/lib 。 元素在文件中用于实现此任务。 它还支持嵌套元素,它提供了类似路径的结构。 1. Apache Ant Junit任务属性 属性 描述 必需 打印测试用例的摘要 否 在单独的JVM中运行测试 否 控制着要分叉测试用例

  • 我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业

  • 我面临这个运行时错误。它说: 错误:任务“:app:dexDebug”的执行失败。 com.android.ide.common.process.ProcessExcture:org.gradle.process.internal.ExecExc0019:进程'命令'/usr/lib/jvm/java-8-oracle/bin/java"完成非零退出值2 这是我的身材。渐变脚本: 请帮帮我。谢谢!

  • 我试着运行我的第一个颤振项目,但我不断地得到这个错误。 失败:构建失败,有一个异常。 > 哪里出错了:配置根项目'android'时出现问题。 无法解析配置“:classpath”的所有项目。无法下载gradle。jar(com.android.tools.build:gradle:3.5.0)无法获取资源的https://dl.google.com/dl/android/maven2/com/a

  • 我在gradle项目中添加了一个任务: 现在,任务总是在任务之前运行。这很好,因为构建任务包含许多步骤。现在我想显式禁用其中一个包含的任务。