JAR Probe Assembly
Since 3.5.0.
Automatic Defaults
In CDI mode, Pax Exam by default uses the test class path, creating a bean archive for each class path element containing a META-INF/beans.xml
descriptor.
Manually Assembling a JAR Probe
Sometimes, it is not desirable to have all classes on the test class path to be treated as beans. In this case, you can create a JAR probe which contains an explicit subset of classes and resources. Pax Exam creates a JAR from these resources on the fly, builds an URL class loader for this JAR and sets this loader as thread context class loader before starting the CDI container.
Using a configuration method and a jarProbe()
option with additional arguments, you can assemble the JAR probe from scratch:
package org.ops4j.pax.exam.regression.cdi.probe.calc.test; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.ops4j.pax.exam.CoreOptions.jarProbe; import static org.ops4j.pax.exam.CoreOptions.options; import javax.inject.Inject; import org.junit.Test; import org.junit.runner.RunWith; import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.PaxExam; import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; import org.ops4j.pax.exam.spi.reactors.PerClass; @RunWith(PaxExam.class) @ExamReactorStrategy(PerClass.class) public class AdditionTest { @Inject private Calculator calculator; @Configuration public Option[] config() { return options(jarProbe() .classes(Addition.class, BinaryOperation.class, Calculator.class, CalculatorImpl.class) .metaInfResource("src/test/resources/calc/beans.xml") ); } @Test public void add() { assertThat(calculator.operate(2, 3), is(5)); } }
The above example creates a JAR containing nothing but four classes and a META-INF/beans.xml
resource with the given content.
jarProbe() Arguments
classes
Adds classes to
WEB-INF/lib
.classes(Vanilla.class, Chocolate.class)
metaInfResource
Adds the given resource from the class path to the WAR in
META-INF/
.metaInfResource("src/test/resources/calc/foo") // copies the given resource to META-INF/foo
resources
Adds the given resources from the current class path to the JAR, using the same relative path.
resources("com/resources("com/acme/Messages.properties", "com/acme/Messages_de.properties")