快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰集团官网_龟发之家论坛



注:本文直接应用 ant 内置 JUnit 导致了 package junit.framework does not exist 的报错。考试测验将 /usr/share/java/ant-junit4-1.8.2.jar 复制到 ./lib 目录依然无法办理报错。着末只能下载澳门新葡亰集团官网一个 junit.jar 到 ./lib 目录中才办理该问题。

$ wget http://search.maven.org/remotecontent?filepath=junit/junit/4.11/junit-4.11.jar -O ./lib

设置设置设备摆设摆设文件

虽然我们应用了 Log4J,但今朝为止我们仍旧是硬编码,由于我们只是简单调用了 BasicConfigurator.configure(),假如我们想输出不合款式的日志消息,那我们就应该应用一个 property 文件。

我们在源代码删除 BasicConfigurator.configure() 所在行,以及相关的 import 语句。此时运行 ant 会提示:

...

[java] log4j:WARN No appenders could be found for logger (oata.HelloWorld).

[java] log4j:WARN Please initialize the log4j system properly.

编译 HelloWorld.java 源代码并运行:

$ mkdir build/classes

$ javac -sourcepath src -d build/classes src/oata/HelloWorld.java

$ java -cp build/classes oata.HelloWorld

Hello World

增强版构建文件

许多时刻,我们在构建历程中会反复引用相同的目录,main-class 和 jar 文件,这些今朝都是硬编码在构建文件中,别的我们还得记着构建步骤不能搞错。

为办理反复引用相同的器械和避免硬编码,我们可以应用 properties,而主类我们可以应用

标签的属性来指定,别的应用依附包来维持构建历程稳步有序。让我们从新编辑我们的 build.xml:

project name="HelloWorld" basedir="." default="main">

property name="src.dir"value="src"/>

property name="build.dir"value="build"/>

property name="classes.dir" value="${build.dir}/classes"/>property name="jar.dir"value="${build.dir}/jar"/>

property name="main-c澳门新葡亰集团官网lass"value="oata.HelloWorld"/>

target name="clean">

delete dir="${build.dir}"/>target>

target name="compile">

mkdir dir="${classes.dir}"/>javac srcdir="${src.dir}" destdir="${classes.dir}"/>

target>

target name="jar" depends="compile">mkdir dir="${jar.dir}"/>

jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">manifest>

attribute name="Main-Class" value="${main-class}"/>manifest>

jar>target>

target name="run" depends="jar">

java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>target>

target name="clean-build" depends="clean,jar"/>

target name="main" depends="clean,run"/>

project>

现在只必要履行 ant:

$ ant

Buildfile: /home/xavier/Exploration/000_build_java_application_with_ant/AntHelloWorld2/build.xml

clean:[delete] Deleting directory /home/xavier/Exploration/000_build_java_application_with_ant/AntHelloWorld2/build

compile:

[mkdir] Created dir: /home/xavier/Exploration/000_build_java_application_with_ant/AntHelloWorld2/build/classes[javac] /home/xavier/Exploration/000_build_java_application_with_ant/AntHelloWorld2/build.xml:19: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

[javac] Compiling 1 source file to /home/xavier/Exploration/000_build_java_application_with_ant/AntHelloWorld2/build/classes

jar:[mkdir] Created dir: /home/xavier/Exploration/000_build_java_application_with_ant/AntHelloWorld2/build/jar

[jar] Building jar: /home/xa澳门新葡亰集团官网vier/Exploration/000_build_java_application_with_ant/AntHelloWorld2/build/jar/HelloWorld.jar

run:[java] Hello World

main:

BUILD SUCCESSFUL

Total time: 5 seconds

应用第三方库

老是有人会奉告你不要应用 syso-statements,即不要应用 System.out.println() 来记录日志,而应该应用日志 API。下面我们就在我们的项目引入一个第三方库记录日志 Log4J。

我们将第三方库文件放在 lib 目录下。你可以点击这里下载 Log4J 库。创建 lib 目录,并将 log4j-1.2.13.jar 放到 lib 目录下。

$ wget https://archive.apache.org/dist/logging/log4j/1.2.13/logging-log4j-1.2.13.tar.gz

$ cd lib

$ tar zvxf logging-log4j-1.2.13.tar.gz

$ mv logging-log4j-1.2.13/dist/lib/log4j-1.2.13.jar .

我们给我们这项目天生的 jar 文件路径一个 ID,并让它成为一个全局变量,这样我们在 target run 中就可以应用它的 ID 来引用它。printsummary=yes 可以输出更多的信息给我们,而不是简单的 FAILED 或 PASSED,例如掉败了若干项,什么掉败了,printsummary 都可以供给。classpath 是用来探求我们的类。batchtest 是为了更方便测试在将来你添加了新的测试用例,约定俗成的测试类命名为 *Test.java。

$澳门新葡亰集团官网 ant junit

Buildfile: /home/xavier/exploration/000_build_java_application_with_ant/AntHelloWorld2/build.xml

compile:[javac] /home/xavier/exploration/000_build_java_application_with_ant/AntHelloWorld2/build.xml:20: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

[copy] Copying 1 file to /home/xavier/exploration/000_build_java_application_with_ant/AntHelloWorld2/build/classes

jar:[jar] Building jar: /home/xavier/exploration/000_build_java_application_with_ant/AntHelloWorld2/build/jar/HelloWorld.jar

junit:

[junit] Running HelloWorldTest[junit] Tests run: 2, Failures: 1, Errors: 0, Time elapsed: 0.02 sec

[junit] Test HelloWorldTest FAILED

BUILD SUCCESSFULTotal time: 4 seconds

为方便涉猎测试结果,我们可以天生一个测试申报。首先,让认真记录测试数据;其次,将数据转换为可涉猎文本。编辑构建文件 build.xml:

...

property name="report.dir"value="${build.dir}/junitreport"/>...

target name="junit" depends="jar">mkdir dir="${report.dir}"/>

junit printsummary="yes">classpath>

path refid="classpath"/>path refid="application"/>

classpath>

formatter type="xml"/>

batchtest fork="yes" todir="${report.dir}">fileset dir="${src.dir}" includes="*Test.java"/>

batchtest>junit>

target>

target name="junitreport">junitreport todir="${report.dir}">

fileset dir="${report.dir}" includes="TEST-*.xml"/>report todir="${report.dir}"/>

junitreport>target>

由于我们可能会孕育发生大年夜量的文件,而这些文件默认都保存在当前目录下,是以我们定义了一个 report 目录,ant 会在运行 junit 之前创建该目录并将日志输出到该目录。由于日志款式为 XML,这可以让 junitreport 对其澳门新葡亰集团官网进行解析。别的一个 target junitreport 会将 report 目录下所有 XML 文件创建响应的可涉猎的 HTML 款式文档。你可以打开 ${report.dir}/index.html 文件查看所有测试结果(看起来很像 JavaDoc)。

你可以将测试与制作测试申报分为两个义务,由于天生 HTML 申报必要必然的光阴,而你完全没有需要在测试的时刻停下来等待申报天生。

附:

1. Tutorial Hello World with Ant

您可能还会对下面的文章感兴趣: