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.
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.
Post new comment