The Spring Framework gives you a great way to test your Spring JDBC (Spring DAO) code. Just use a special Spring JDBC class with a very long name, and you can test your Spring JDBC code against a real database.
Some people don't like this approach, but I think it's invaluable for (a) testing your SQL syntax when you first create it, and (b) making sure your SQL syntax is still valid after database changes occur.
Spring Dao/JDBC test code
Here's some example Java test code where I extend the Spring JDBC AbstractTransactionalDataSourceSpringContextTests
class to run some simple database tests using JUnit.
In my Spring DAO test, I load the Spring application context file (applicationContext.xml
), get a reference to my Spring DAO object (ftpFileMoverDao
), then pass that DAO object into another object, and then run some tests that hit the database behind the scenes.
I tried to keep this simple, but I wanted to have an example where I showed how to use the Spring JDBC AbstractTransactionalDataSourceSpringContextTests
class, and also load the Spring application context file.
As mentioned, I personally like having regression tests that make sure that I won't have a problem when the database schema changes, and I think this Spring JDBC testing approach of having tests like this that run within a transactional context, and then are rolled back for you automatically, is pretty darn clever.
Here's my Spring DAO test class:
package com.devdaily.foo.controller; import java.util.Calendar; import java.util.Date; import org.junit.Assert; import org.junit.Test; import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests; import com.devdaily.foo.dao.FTPFileMoverDao; public class StorEventHandlerTests extends AbstractTransactionalDataSourceSpringContextTests { FTPFileMoverDao ftpFileMoverDao; @Override protected String[] getConfigLocations() { return new String[] { "applicationContext.xml" }; } /** * Test the valid file extensions we keep in the database. */ @Test public void testValidFileExtensions() { // mimic how the application normally gets a handle on our dao object ftpFileMoverDao = (FTPFileMoverDao) applicationContext.getBean("ftpFileMoverDao"); // create the storEventHandler, then give it the dao StorEventHandler storEventHandler = new StorEventHandler(null); storEventHandler.setFTPFileMoverDao(ftpFileMoverDao); // run the tests Assert.assertTrue(storEventHandler.fileExtensionIsValid("JPG")); Assert.assertTrue(storEventHandler.fileExtensionIsValid("JPEG")); Assert.assertTrue(storEventHandler.fileExtensionIsValid("PNG")); } }
I hope you can use this Java/Spring/JDBC/Dao test code in your own applications. I really do think this is a terrific feature of the Spring JDBC Framework.