How To Unit Test CRUD Operations

I like to unit test CRUD (Create, Read, Update, Delete) operations for my domain objects as well as find all. I use the same template again and again, it's quick to do and makes sure that the basic operations work. Here is what I do :

  • A first find all to get all the objects from the database
  • Create an object with random values and persist it into the database
  • Find the created object from the database
  • Make sure it exists
  • Make sure it has the right random values
  • Update the created object with other random values into the database
  • Find the updated object from the database
  • Make sure it still exists
  • Make sure it has the new random values
  • A second find all makes sure that there is one more object in the database
  • Delete the object from the database
  • Find the object from the database
  • Make sure it doesn't exist
  • A third find all makes sure that there is the initial number of objects in the database

Here is the (simplified) JUnit code that tests the CRUD operations for an Item.

@Test
public void testCRUD() throws Exception {

// Gets two random numbers Long random = getRandom(); Long updateRandom = getRandom();

// Item is the domain object Item item = new Item();

// The method findAll brings back all the objects from the DB int firstFindAll = findAll();

// Item gets mock values and is persisted. Id is returned item = getMockItemValues(item, random); persist(item); Long id = item.getId();

// Find the created object with the given Id and makes sure it has the right values item = find(id); assertNotNull("Object should exist", item); checkMockItemValues(item, random);

// Updates the object with new random values item = getMockItemValues(item, updateRandom); merge(item);

// Find the updated object and makes sure it has the new values item = em.find(Item.class, id); assertNotNull("Object should exist", item); checkMockItemValues(item, updateRandom);

// Gets all the objects from the database… int secondFindAll = findAll();

// ...and makes sure there is one more object if (firstFindAll + 1 != secondFindAll) fail("The collection size should have increased by 1");

// The object is now deleted remove(item);

// Find the object and make sure it has been removed item = em.find(Item.class, id); assertNull("Object should not exist", item);

// Gets all the objects from the database… int thirdFindAll = findAll();

// ...and makes sure we have the original size if (firstFindAll != thirdFindAll) fail("The collection size should have be the same as original"); }

If you have any other ideas, let me know.

Comments 0

No comments for this document
Java Champion

Paris JUG Leader

Cast Codeurs

Antonio Goncalves' personal website