JUnit 4 Integration
JUnit 4 Integration
JTR is not an alternative to JUnit, being mainly focused on stress-testing back-end systems built around the JEE technological-stack rather than unit-testing single classes’ methods.
That’s why JTR, since version 5, seamlessly integrates JUnit 4 tests. Integration is fundamental since most of the time one has his/her unit-tests written to prove methods correctness along with higher-level tests (integration-tests) that work on a wider sub-system.
How integration works?
There is nothing special you have to do to run your JUnit 4 test classes. Let’s see an example. Suppose this is your JUnit 4 test class:
package jtr.test.junit;
import org.apache.commons.math.random.JDKRandomGenerator;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
public class JUnitRunner {
int x, y, sum;
public JUnitRunner() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
JDKRandomGenerator prng = new JDKRandomGenerator();
x = prng.nextInt();
y = prng.nextInt();
sum = x + y;
}
@After
public void tearDown() {
x = 0;
y = 0;
sum = 0;
}
@Test public void sum() {
assertTrue(x+y==sum);
}
@Test public void mul() {
JDKRandomGenerator prng = new JDKRandomGenerator();
int res = prng.nextInt();
assertTrue(x*y==res);
}
}
In order to have JTR 5 run this JUnit 4 test all you have to do is simply declare it as any other runner in the jtr.xml file just as follows:
<runner runs="1">
<runner-fqn>jtr.test.junit.JUnitRunner</runner-fqn>
<instance-count>1</instance-count>
<parameters-assignment-policy>indexed</parameters-assignment-policy>
<parameters>
<param name="sleepTime" value="10" />
</parameters>
</runner>
The only thing you have to pay attention to is that as per this preliminary release you still need to specify one parameter, the sleepTime.
Current limitations
JUnit 4 test classes cannot take advantage of the majority the features we have seen so far.
Simply stated there is only a one-way communication between JTR 5 and JUnit 4: the former is aware of the latter but not vice-versa.
The only JTR features JUnit 4 test classes can take advantage of are:
-seamless test distribution (via EDiT)
-concurrent test execution (multiple instantiation via the instance-count element)
-iterated test execution (via the runs attribute)