Case Study

Testing CRUD Operations (Create)

Previous Next
The implementations of CRUD operations are generic and so are the tests. Here is the code that tests the creation of a persistent domain model object of generic type V. AbstractDaoTest.java (excerpt)

	public void testCreateOne() throws Exception {
		runCreateOne();
	}
	
	protected void runCreateOne() throws Exception {
		V item = (V)getObject("item");
		V expected = (V)getObject("expected");
		Exception expectedException = getObject("expectedException");
		try {
			V actual = getSubject().create(item);
			if (expectedException != null) {
				fail("Exception not thrown.");
			}
			assertTrue(isEqual(expected, actual));
		}
		catch (Exception ex) {
			if (expectedException == null || !expectedException.getClass().isAssignableFrom(ex.getClass())) {
				throw ex;
			}
		}
	}
	
The test retrieves three objects from the SpringUnit context: an item persisted by the DAO under test, of type V; an expected return value of type V; and an expected exception. Next, the method under test, create, is called, passing in the item. As defined by the API of the Case Study, this method returns an actual value of type V. Here we can see a pattern. If the SpringUnit context contains an expected exception, i.e. expectedException != null, then the test has failed, since a thrown exception would have been trapped by the enclosing exception handler. Otherwise, the test passes if the actual object is equivalent to the expected object, using object (field-by-field) equality. In the event that an exception was thrown when calling the method under test, then the test passes if the thrown exception is a (proper or improper) subclass of the expected exception. If not, then the test fails due to some unexpected exception.
Previous Next