gpt4 book ai didi

java - 无法使用 ant 运行类别中的所有 junit 测试

转载 作者:行者123 更新时间:2023-11-28 20:52:57 27 4
gpt4 key购买 nike

背景

我正在尝试创建一个 Ant 脚本:

  • 编译源文件
  • 编译junit测试
  • 运行特定类别的 junit 测试

到目前为止,我所做的大部分工作都取自 this question .

到目前为止,这是我的 ant 脚本中的内容:

<?xml version="1.0"?>
<project name="junit_tests">
<property name="build-main" location="build/main"/>
<property name="build-test" location="build/main"/>
<property name="src-test" value="java/test" />
<property name="src-com" value="java/com" />
<property name="src-lib" value="webapp/WEB-INF/lib" />
<property name="test-lib" value="java/test/lib" />
<path id="classpath">
<fileset dir="${src-lib}" includes="*.jar"/>
<fileset dir="${test-lib}" includes="*.jar" />
</path>
<path id="classpath.test">
<path refid="classpath"/>
<pathelement location="${build}"/>
</path>
<target name="init">
<mkdir dir="${build-main}" />
<mkdir dir="${build-test}" />
</target>

<target name="compileSrc" depends="init" description="compile src files ">
<javac debug="on" destdir="${build-main}" encoding="UTF-8" fork="true" memorymaximumsize="1024m" includeantruntime="true">
<src path="${src-com}" />
<classpath refid="classpath"/>
</javac>
<javac debug="on" destdir="${build-main}" encoding="UTF-8" fork="true" memorymaximumsize="1024m" includeantruntime="true">
<src path="${src-test}" />
<classpath refid="classpath"/>
</javac>
</target>


<!-- Test and build all files -->
<!-- To run this: use "ant" (default) or "ant run" -->
<target name="run" depends="compileSrc">
<junit printsummary="on" haltonfailure="no" fork="true">
<classpath>
<path refid="classpath.test" />
<pathelement location="${build-test}"/>
</classpath>
<formatter type="xml" />
<batchtest>
<fileset dir="${build-main}" includes="**/NonDBTest.class" />
</batchtest>
</junit>
</target>
</project>

junit 任务的输出

run:[junit] WARNING: multiple versions of ant detected in path for junit[junit] jar:file:/usr/local/Cellar/ant/1.9.7/libexec/lib/ant.jar!/org/apache/tools/ant/Project.class[junit] and jar:file:/Users/arnab/work/my_project/webapp/WEB-INF/lib/ant.jar!/org/apache/tools/ant/Project.class[junit] Running test.NonDBTest[junit] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.178 sec

BUILD SUCCESSFUL Total time: 37 seconds

问题此类别 NonDBTest 中的测试类共有 7 个测试,因此 junit 显然没有运行所有测试。

NonDBTest.java 只是一个没有方法的接口(interface),这就是我的测试类的样子

@Category(NonDBTest.class)
public class MyTestClass extends AbstractTestCase{
....

@Test
public void testA(){ ... }

@Test
public void testB(){ ... }

@Test
public void testC(){ ... }

@Test
public void testD(){ ... }

@Test
public void testE(){ ... }

}

问题我究竟做错了什么?我试过将 NonTestDB 更改为一个类。我已经尝试实现接口(interface),但到目前为止没有任何效果。如何让 junit 运行 NonTestDB 类别中的所有类?我错过了什么吗?

最佳答案

通过 maven 使用 JUnit 类别更容易,因为您可以配置类别以通过 group 运行属性。

我怀疑 ant 是否明确支持类别,而且我认为您不能在测试任务(就像你所做的那样)。

解决方法是还为您的类别创建一个 JUnit Suite,然后仅从 ant 目标运行该 Suite:

@RunWith(Categories.class)
@IncludeCategory(NonDBTest.class)
@SuiteClasses( { MyTestClass1.class, MyTestClass2.class })
public class NonDBTestSuite {
// will run only tests annotated with NonDBTest from
// MyTestClass1 and MyTestClass2.
}

那么您的 ant 配置应该指示应该执行 NonDBTestSuite

<fileset dir="${build-main}" includes="**/NonDBTestSuite.class" />

请注意 answer你所指的也定义了这个套件。

这不是很好的部分是您需要维护所有套件类。我对多个类别所做的是维护一个包含所有 测试类的AllTests 套件。较小的套件然后会在 SuiteClasses 注释中使用此 AllTests

关于java - 无法使用 ant 运行类别中的所有 junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38499499/

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