== 单元测试应用示例——测试工具类 == 工具类cn.com.pcgames.gamehall2.util.SqlHelper是游戏大厅DAO层辅助工具类.例如:SqlHelper.buildInsert(List fields, String tablename,String[] excludes);[[BR]] 根据数据库表元信息,表名生成sql插入语句,使用示例代码如cn.com.pcgames.gamehall2.repository.impl.GameDAOImpl[[BR]] {{{ #!java public class GameDAOImpl extends AbstractRepository implements GameDAO { private List tableFields; public void setTableFields(List tableFields) { this.tableFields = tableFields; } public void init() { this.tableFields = SqlHelper.listFields(simpleJdbcTemplate, "game"); } public GameDAOImpl() { super(Game.class); } public long createGame(Game game) { long gameId = idGenerator.generate("game", "gameId"); game.setGameId(gameId); //SqlHelper生成插入语句 String sql = SqlHelper.buildInsert(tableFields, "game", null); Object[] params = SqlHelper.getParameters(game, tableFields, null); int result = simpleJdbcTemplate.update(sql, params); return result == 1 ? gameId : 0; } ...... } }}} 如何单元测试SqlHelper.buildInsert?[[BR]] 测试SqlHelper.buildInsert(List fields, String tablename,String[] excludes);方法,需要准备fields,tablename,excludes这三个参数[[BR]] * 准备fields fields是数据库表的元信息,元信息依赖SimpleJdbcTemplate对象根据表名获取,我们让测试类SqlHelperTest继承之AbstractTransactionalJUnit4SpringContextTests[[BR]] 以获得applicationContext对象的引用,然后注入SimpleJdbcTemplate对象. {{{ #!java @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext.xml" }) public class SqlHelperTest extends AbstractTransactionalJUnit4SpringContextTests { @Autowired SimpleJdbcTemplate simpleJdbcTemplate; ...... } }}} * 准备tablename,我们可以在数据库中创建一张表,用来测试 {{{ #!java private void createTesttable(String table) { simpleJdbcTemplate.update("DROP TABLE IF EXISTS `" + table + "`"); simpleJdbcTemplate .update("CREATE TABLE `" + table + "` (" + "`id` bigint(20) NOT NULL," + "`createAt` timestamp NULL DEFAULT NULL," + "`name` varchar(50) DEFAULT NULL," + "`age` int(11) DEFAULT NULL," + "`info` text," + "`rate` float DEFAULT NULL," + "PRIMARY KEY (`id`)" + ") ENGINE=InnoDB DEFAULT CHARSET=gbk;"); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2011); calendar.set(Calendar.MONTH, 10); calendar.set(Calendar.DAY_OF_MONTH, 10); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 23); calendar.set(Calendar.SECOND, 23); int rows = simpleJdbcTemplate.update( "INSERT INTO test_table VALUES(?,?,?,?,?,?)", new Object[] { 393648562, calendar.getTime(), "chenyang", 25, "速度第一,完美第二",0.35 }); Assert.assertEquals(1, rows); } }}}