Java Reference
In-Depth Information
middle, isn't something the normal
JU
nit test runner is designed to handle. You'll
need to run with a special Pax Exam runner instead by adding a class-level annotation:
@RunWith(org.ops4j.pax.exam.junit.JUnit4TestRunner.class)
Pax Exam can also inject a bundle context into your test class:
import javax.inject.Inject;
@Inject
protected BundleContext ctx;
WARNING: WHY IS NOTHING BEING INJECTED?
If you're using Pax Exam injec-
tion, make sure to use the
javax.inject.Inject
annotation and not
org.ops4j.pax.exam.Inject
. The Pax Exam annotation is nonfunctional in
Pax Exam 2.0 and up.
It's a good pattern to use the bundle context for querying the state of the framework,
but to use Pax Exam's
API
to configure the framework and install bundles.
CONFIGURING A FRAMEWORK
Pax Exam configuration of the framework is done in a method annotated
@Configu-
ration
. Pax Exam provides a fluent
API
for building up configuration options and
gives you detailed control over the contents and configuration of your
OSG
i frame-
work. You can specify the
OSG
i framework implementation (Equinox, Felix, Knop-
flerfish) and version, or any combination of implementations and versions, system
properties, and installed bundles. You can specify a list of bundles to install, as well as
JVM
options, and
OSG
i frameworks. All of these can be controlled using methods stati-
cally imported from
org.ops4j.pax.exam.CoreOptions
and combined into an array
using the
CoreOptions.options()
method:
@Configuration
public static Option[] configuration() {
MavenArtifactProvisionOption foodGroup = mavenBundle().groupId(
"fancyfoods");
Option[] fancyFoodsBundles = options(
foodGroup.artifactId("fancyfoods.department.cheese").
version("1.0.0"),
foodGroup.artifactId("fancyfoods.api").
version("1.0.0"),
foodGroup.artifactId("fancyfoods.persistence").
version("1.0.0"),
foodGroup.artifactId("fancyfoods.datasource").
version("1.0.0"));
Option[] server = PaxConfigurer.getServerPlatform();
Option[] options = OptionUtils.combine(fancyFoodsBundles,
server);
return options;
}
Here you're installing the
fancyfoods.department.cheese
bundle, along with its
dependencies and the bundles that make up the hosting server. Most of your tests will