Database Unit Testing - CRUD Testing
Jakob Jenkov |
If you need to test a DAO or DAO like component, you will need to test that all of inserts, reads, updates and deletes work as expected. These operations are often abbreviated CRUD (Create Read Update Delete).
Rather than writing a separate unit test method for each operation (insert, read, update, delete), it can be easier to test all 4 operations inside the same test method. That way, you don't have to insert records into the database inside the update and delete test methods. You just reuse the data inserted earlier in the single CRUD test method.
Here is a simple template showing you how to do this:
@Test public void testIt() throws Exception { Connection connection = getConnection(); connection.setAutoCommit(false); //begin transaction MyDao myDao = new MyDaoImpl(connection); try{ myDao.insertABC("1", "one"); myDao.insertABC("2", "two"); assertEquals("one", myDao.readABC("1")); assertEquals("two", myDao.readABC("2")); myDao.update("1", "oneOne"); myDao.update("2", "twoTwo"); assertEquals("oneOne", myDao.readABC("1")); assertEquals("twoTwo", myDao.readABC("2")); myDao.delete("1"); myDao.delete("2"); assertNull(myDao.readABC("1")); assertNull(myDao.readABC("2")); } finally { connection.rollback(); connection.close(); } }
The test method first tests the inserts, then uses the read methods to test if both the insert and read method works.
Second, the test method updates the records in the database, and again uses the read methods to help verify that the update methods works.
Third, the test deletes the records in the database again, and again uses the read methods
to help verify that the delete methods works. The test thus also verifies, that the read method
returns null
if no data is found in the database, rather than throwing an exception.
Tweet | |
Jakob Jenkov |