Skip to content

Getting started – Ant

Marc Philipp edited this page Jun 24, 2020 · 2 revisions

This small example shows you how to write and run a unit test with Ant. You need to have Ant installed and a text editor.

Preparation

Create a new folder junit-example and a sub-folder lib. Download the current JUnit and Hamcrest into the sub-folder lib.

Build file

Create the build file build.xml in the junit-example folder.

<project name="junit-example"> <property name="main.build.dir" value="build/main"/> <property name="main.src.dir" value="src/main/java"/> <property name="test.build.dir" value="build/test"/> <property name="test.src.dir" value="src/test/java"/> <path id="classpath.test"> <pathelement location="lib/junit-4.12.jar"/> <pathelement location="lib/hamcrest-core-1.3.jar"/> <pathelement location="${main.build.dir}"/> </path> <target name="compile"> <mkdir dir="${main.build.dir}"/> <javac srcdir="${main.src.dir}" destdir="${main.build.dir}" includeantruntime="false"/> </target> <target name="test-compile" depends="compile"> <mkdir dir="${test.build.dir}"/> <javac srcdir="${test.src.dir}" destdir="${test.build.dir}" includeantruntime="false"> <classpath refid="classpath.test"/> </javac> </target> <target name="test" depends="test-compile"> <junit printsummary="on" haltonfailure="yes" fork="true"> <classpath> <path refid="classpath.test"/> <pathelement location="${test.build.dir}"/> </classpath> <formatter type="brief" usefile="false" /> <batchtest> <fileset dir="${test.src.dir}" includes="**/*Test.java" /> </batchtest> </junit> </target> </project>

Create the class under test

Create a sub-folder src/main/java and a new file Calculator.java within this sub-folder. Copy the following code to this file.

public class Calculator { public int evaluate(String expression) { int sum = 0; for (String summand: expression.split("\\+")) sum += Integer.valueOf(summand); return sum; } }

Create a test

Create a sub-folder src/test/java and a new file CalculatorTest.java within this sub-folder. Copy the following code to this file.

import static org.junit.Assert.assertEquals; import org.junit.Test; public class CalculatorTest { @Test public void evaluatesExpression() { Calculator calculator = new Calculator(); int sum = calculator.evaluate("1+2+3"); assertEquals(6, sum); } }

Run the test

Run the test from the command line.

ant test 

The output is

Buildfile: /home/kent/junit-example/build.xml compile: [mkdir] Created dir: /home/kent/junit-example/build/main [javac] Compiling 1 source file to /home/you/junit-example/build/main test-compile: [mkdir] Created dir: /home/kent/junit-example/build/test [javac] Compiling 1 source file to /home/you/junit-example/build/test test: [junit] Running CalculatorTest [junit] Testsuite: CalculatorTest [junit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0,014 sec [junit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0,014 sec [junit] BUILD SUCCESSFUL Total time: 0 seconds 

The second last line tells you that your test is successful.

Let the test fail

Modify Calculator.java in order to get a failing test. Replace the line

sum += Integer.valueOf(summand); 

with

sum -= Integer.valueOf(summand); 

and run the test again.

ant test 

Now the test fails and the last lines of the output are

[junit] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0,017 sec [junit] [junit] Testcase: evaluatesExpression(CalculatorTest):	FAILED [junit] expected:<6> but was:<-6> [junit] junit.framework.AssertionFailedError: expected:<6> but was:<-6> [junit]	at CalculatorTest.evaluatesExpression(Unknown Source) [junit] [junit] BUILD FAILED /home/kent/junit-example/build.xml:26: Test CalculatorTest failed 

JUnit tells you which test failed (CalculatorTest.evaluatesExpression) and what went wrong:

expected:<6> but was:<-6> 

Clone this wiki locally