安装环境
- 操作系统 - 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
