安装环境
- 操作系统 - CentOS 7
- 主机名 - junit-01.example.com
- IP 地址 - 192.168.1.131/24
创建一个 Java 项目:
创建一个目录结构来存储 Java 源文件和构建文件。
[root@junit-01 ~]# mkdir -p ~/myMathApp/{src/myMathApp,build/classes,build/jar}
现在,编写一些 Java 代码。
[root@junit-01 ~]# vi ~/myMathApp/src/myMathApp/Calculate.java
我们编写了一个Calculate 类,它执行一些基本的算术运算。
Java代码如下:
package myMathApp; public class Calculate { public int sum(int num1, int num2) { return num1 + num2; } public int average(int num1, int num2, int num3) { return (num1 + num2 + num3)/3; } }
创建一个 Apache Ant build.xml 文件以使用 ant 命令编译和运行此代码。
[root@junit-01 myMathApp]# vi ~/myMathApp/build.xml
我们使用的 build.xml 脚本与我们在上一篇文章中使用的相同。
<project default="run"> <target name="clean"> <delete dir="build" /> </target> <target name="compile" depends="clean"> <mkdir dir="build/classes" /> <javac srcdir="src" destdir="build/classes" includeantruntime="yes" /> </target> <target name="jar" depends="compile"> <mkdir dir="build/jar" /> <jar destfile="build/jar/myMathApp.jar" basedir="build/classes"> <manifest> <attribute name="Main-Class" value="myMathApp.Calculate" /> </manifest> </jar> </target> <target name="run" depends="jar"> <java jar="build/jar/myMathApp.jar" fork="true" /> </target> </project>
我们根据我们的项目调整了 build.xml 文件中的一些参数。
[root@junit-01 ~]# cd ~/myMathApp/ [root@junit-01 myMathApp]# ant Buildfile: /root/myMathApp/build.xml clean: [delete] Deleting directory /root/myMathApp/build compile: [mkdir] Created dir: /root/myMathApp/build/classes [javac] Compiling 1 source file to /root/myMathApp/build/classes jar: [mkdir] Created dir: /root/myMathApp/build/jar [jar] Building jar: /root/myMathApp/build/jar/myMathApp.jar run: [java] Error: Main method not found in class myMathApp.Calculate, please define the main method as: [java] public static void main(String[] args) [java] or a JavaFX application class must extend javafx.application.Application [java] Java Result: 1 BUILD SUCCESSFUL Total time: 1 second
这里 run target 抛出错误,因为我们的 Java 类缺少主程序。
无需担心,我们已经知道了,因此,只需忽略此错误即可。
我们的 Java 项目在此处使用 Apache Ant 成功编译和构建。
现在,编写另一个 Java 类来执行计算类的单元测试。
[root@junit-01 myMathApp]# vi ~/myMathApp/src/myMathApp/CalculateTest.java
我们编写了另一个类CalculateTest 来测试Calculate 类,如下所示:
package myMathApp; import org.junit.Test; import static org.junit.Assert.*; public class CalculateTest { Calculate Calculator = new Calculate(); @Test public void testSum() { int sum = Calculator.sum(2,5); int testsum = 7; assertEquals(sum, testsum); } @Test public void testaverage() { int average = Calculator.average(9, 18, 27); int testaverage = 18; assertEquals(average, testaverage); } }
将junit 类库复制到项目的lib 目录中。
[root@junit-01 myMathApp]# mkdir ~/myMathApp/lib [root@junit-01 myMathApp]# cp /usr/share/java/junit* lib/ [root@junit-01 myMathApp]# cp /usr/share/java/ant/ant-junit* lib/
编辑 build.xml 文件以包含 lib 目录以编译目标。
<project default="run"> <target name="clean"> <delete dir="build" /> </target> <path id="classpath"> <fileset dir="lib" includes="**/.jar" /> </path> <target name="compile" depends="clean"> <mkdir dir="build/classes" /> <javac srcdir="src" destdir="build/classes" classpathref="classpath" includeantruntime="yes" /> </target> <target name="jar" depends="compile"> <mkdir dir="build/jar" /> <jar destfile="build/jar/myMathApp.jar" basedir="build/classes"> <manifest> <attribute name="Main-Class" value="myMathApp.Calculate" /> </manifest> </jar> </target> <target name="run" depends="jar"> <java jar="build/jar/myMathApp.jar" fork="true" /> </target> </project>
再次运行 ant 命令。
[root@junit-01 myMathApp]# ant Buildfile: /root/myMathApp/build.xml clean: [delete] Deleting directory /root/myMathApp/build compile: [mkdir] Created dir: /root/myMathApp/build/classes [javac] Compiling 2 source files to /root/myMathApp/build/classes jar: [mkdir] Created dir: /root/myMathApp/build/jar [jar] Building jar: /root/myMathApp/build/jar/myMathApp.jar run: [java] Error: Main method not found in class myMathApp.Calculate, please define the main method as: [java] public static void main(String[] args) [java] or a JavaFX application class must extend javafx.application.Application [java] Java Result: 1 BUILD SUCCESSFUL Total time: 1 second
在 build.xml 文件中包含测试目标以使用 JUnit 执行单元测试。
<project default="run"> <target name="clean"> <delete dir="build" /> </target> <path id="classpath"> <fileset dir="lib" includes="**/.jar" /> </path> <target name="compile" depends="clean"> <mkdir dir="build/classes" /> <javac srcdir="src" destdir="build/classes" classpathref="classpath" includeantruntime="yes" /> </target> <target name="test" depends="jar"> <junit printsummary="yes"> <classpath> <path refid="classpath" /> <path location="build/jar/myMathApp.jar" /> </classpath> <batchtest fork="yes"> <fileset dir="src" includes="**/*Test.java" /> </batchtest> </junit> </target> <target name="jar" depends="compile"> <mkdir dir="build/jar" /> <jar destfile="build/jar/myMathApp.jar" basedir="build/classes"> <manifest> <attribute name="Main-Class" value="myMathApp.Calculate" /> </manifest> </jar> </target> <target name="run" depends="jar"> <java jar="build/jar/myMathApp.jar" fork="true" /> </target> </project>
为测试目标运行 Ant 作业。
[root@junit-01 myMathApp]# ant test Buildfile: /root/myMathApp/build.xml clean: [delete] Deleting directory /root/myMathApp/build compile: [mkdir] Created dir: /root/myMathApp/build/classes [javac] Compiling 2 source files to /root/myMathApp/build/classes jar: [mkdir] Created dir: /root/myMathApp/build/jar [jar] Building jar: /root/myMathApp/build/jar/myMathApp.jar test: [junit] Running myMathApp.CalculateTest [junit] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 sec BUILD SUCCESSFUL Total time: 1 second
测试目标执行两个测试,两个测试都成功。
为了测试它,在Calculate.java 类中产生一个逻辑错误。
package myMathApp; public class Calculate { public int sum(int num1, int num2) { return num1 - num2; } public int average(int num1, int num2, int num3) { return (num1 + num2 + num3)/2; } }
在Calculate.java 中产生一些逻辑错误后再次运行Ant 任务。
[root@junit-01 myMathApp]# ant test Buildfile: /root/myMathApp/build.xml clean: [delete] Deleting directory /root/myMathApp/build compile: [mkdir] Created dir: /root/myMathApp/build/classes [javac] Compiling 2 source files to /root/myMathApp/build/classes jar: [mkdir] Created dir: /root/myMathApp/build/jar [jar] Building jar: /root/myMathApp/build/jar/myMathApp.jar test: [junit] Running myMathApp.CalculateTest [junit] Tests run: 2, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec [junit] Test myMathApp.CalculateTest FAILED BUILD SUCCESSFUL Total time: 2 seconds
这两个测试现在都失败了。
在 CentOS 7 上安装 JUnit:
使用 yum 命令安装 JUnit 包。
[root@junit-01 ~]# yum install -y junit ant-junit
在 CentOS 7 上安装 Java 开发工具包 (JDK):
登录到 junit-01.example.com。
使用 yum 命令安装 Java 开发工具包 (JDK)。
[root@junit-01 ~]# yum install -y java-1.8.0-openjdk
JUnit 是 Java 编程语言的开源单元测试框架。
JUnit 在测试驱动开发中扮演着非常重要的角色。
Junit 在编译时作为 JAR 链接。
该框架位于 Junit 4 或者更高版本的 org.junit 包下。
JUnit 可以与 Apache Ant 集成以创建 Java 应用程序的部署管道。
在本文中,我们将在 CentOS 7 上安装和集成 Apache Ant 与 JUnit。
在 CentOS 7 上安装 Apache Ant
使用 yum 命令安装 Apache Ant。
[root@junit-01 ~]# yum install -y ant
检查 Java Development Kit (JDK) 和 Apache Ant 的安装。
[root@junit-01 ~]# java -version openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode) [root@junit-01 ~]# ant -version Apache Ant(TM) version 1.9.4 compiled on November 5 2018