We defined integration testing as a testing strategy whose purpose is to verify that all of the
different technologies and resources used in the application can actually come together and
function properly as a whole. Integration tests typically use embedded technologies to start
whatever resources are needed in memory to avoid having to rely on external resources to
be up and running. We showed how Derby can be used as an embedded database. We also
showed how the GlassFish implementation of the embedded EJBContainer can be used
to test EJBs. The embedded EJBContainer can either be used directly or by a more ad-
vanced integration testing tool like Arquillian. Using Arquillian gives the test writer access
to more advanced Java technology, such as CDI, which allows for injecting resources from
the embedded container directly into the test. This allows more of the focus to be put on
writing the test.
Finally, we defined functional testing as a testing strategy whose purpose is to be the last
line of defense for logical problems with your application. Typically functional testing is
performed by members of a testing team who can make intelligent decisions on the correct-
ness of the application.
No testing will ever catch everything that can possibly go wrong. But a good testing
strategy will minimize the risk and aid in the diagnosis when things do happen.