Channels ▼
RSS

JVM Languages

Coarse-Grained Unit Testing


The Test

As for the unit test itself, I wrote a base class DataDependantEJBTestCase that helps initialize OpenEJB with the data source during setup as shown below.

As you might have noticed, the inclusion filter (like that above) can load specific objects. This feature is useful in large projects with lot of EJBs because it cuts down load time. Just the necessary EJBs required for each specific test can be loaded using this feature. This setup method also creates and stores the handle to context object and data helper for the subclasses to use. All unit tests can extend this base class to perform the setup.

TicketBookerTest is the test class for ticket booking session EJB. It extends DataDependantEJBTestCase and calls its setup method to initialize as shown below:

It also gets handle to EJB using obtained using JNDI lookup. The key thing to note here is that it prepares the database using seed data stored in XML file by invoking data helper. This is the critical step to create repeatable data dependant test. It does it with the help of the Ticket_Seed DBUnit XML data file which contains ticket data as shown below:

That's all there to it for setup. Now let's take a look at individual test methods and how the setup helps it.

The first method tests the booking logic as shown below:

Since the setup method cleans up existing data everytime before running the test, it should always succeed as long as the implementation is correct.

The second method tests the branch of booking code that is supposed to validate and throw an error message if the data already exists:

Since the booking data of Pakkirisamy is always seeded in the setup for that destination as mentioned in the XML, this test should always pass as long as it throws validation exception correctly.

The next method tests if the seat availability checking method correctly returns True as shown below:

Since the setup cleans up existing data, this also should always pass as long as the logic is implemented correctly by the session bean.

The final method tests if the seat availability checking method correctly returns False:

Since we inserted five bookings from Marudhur to Mars using the XML file, this should always return False if the logic is implemented correctly.

All of these tests can run independent of application server and within your IDE. So developing, debugging, and testing become less time consuming and less painful.


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 

Video