Getting Started with CDI Tests
Writing a test
Write a JUnit test using any of the usual JUnit 4.x annotations and use @Inject
in combination with appropriate qualifiers to inject the beans under test.
Example:
@RunWith( PaxExam.class ) public class VanillaTest { @Inject @Vanilla private IceCreamService vanilla; @Inject @Chocolate private IceCreamService chocolate; @Inject private IceCreamService defaultFlavour; @Test public void checkVanillaFlavour() { assertThat( vanilla.getFlavour(), is( "Vanilla" ) ); } @Test public void checkChocolateFlavour() { assertThat( chocolate.getFlavour(), is( "Chocolate" ) ); } @Test public void checkDefaultFlavour() { assertThat( defaultFlavour.getFlavour(), is( "Vanilla" ) ); } }
In this example, IceCreamService
is an interface implemented by two managed beans VanillaService
, qualified by @Vanilla @Default
, and ChocolateService
, qualified by @Chocolate
.
When running this test with Pax Exam, the PaxExam
JUnit runner starts a CDI container embedded in the current Java VM and uses the BeanManager
to inject dependencies into instances of JUnit test classes instantiated by JUnit (i.e. not managed by the CDI container). When all dependencies are satisfied, all test methods are executed directly by the JUnit driver.
All of this is completely transparent to the outer JUnit runner (e.g. the JUnit launcher of Eclipse, or the Surefire Maven plugin).
Thus, working with Eclipse, you can easily run a whole set of Pax Exam tests by simply selecting a Java package with test classes and then launching JUnit from the context menu.
Running a Test
- Make sure that all dependencies of your system under test and all required Pax Exam modules are on the classpath (see Maven Dependencies).
Create a configuration file
exam.properties
in the root of your classpath with the following contents:pax.exam.system = cdi
- Run your test or a whole set of tests just like any plain old JUnit test, e.g. from your IDE, under Maven Surefire or as part of your Continuous Integration job.
Supported Containers
Read more about the supported CDI Containers.