當我嘗試單元測試擴展StoredProcedure下面的類我得到一個NullPointerException行:return (Map) execute(csc, new CallableStatementCallback()
JDBCTemplate
類。我嘲笑在execute
方法中傳遞的bean,DataSource
和sql。單元測試java類擴展存儲過程與EasyMock
public class MyStoredProc extends StoredProcedure {
/**
* Constructor - sets SQLParameters for the stored procedure.
*
* @param ds - DataSource
*/
public MyStoredProc(DataSource dataSource, String sql) {
super(dataSource, sql);
declareParameter(new SqlOutParameter("return",Types.NUMERIC));
declareParameter(new SqlParameter("BATCH_ID",Types.NUMERIC));
declareParameter(new SqlParameter("PROCESS_TYPE",Types.VARCHAR));
complie();
}
public BigDecimal execute(MyBean bean){
BigDecimal returnValue = BigDecimal.valueOf(-1);
Map in = new HashMap();
in.put("BATCH_ID", bean.getBatchID());
in.put("PROCESS_TYPE", bean.getProcessType());
Object obj = execute(in);
if (obj != null) {
Object output = ((HashMap) obj).get("return");
if(output instanceof BigDecimal) {
returnValue = (BigDecimal)output;
}
}
return bigDec;
}
}
測試用例:P.S - 當我調試這個測試的情況下,模擬的StoredProcedure未在all.Instead使用的實際執行時使用。
public class MyStoredProcTest {
private MyStoredProc mysp;
private DataSource dataSource;
private String sql;
@Before
public void setUp() {
dataSource = EasyMock.createMock(DataSource.class);
sql = "Testing";
mysp = new MyStoredProc(dataSource, sql);
}
@Test
public void testExecute() {
StoredProcedure storedProcedure = EasyMock
.createMock(StoredProcedure.class);
HashMap map = new HashMap();
map.put("return", BigDecimal.ONE);
expect(storedProcedure.execute(EasyMock.anyObject(Map.class))).andReturn(map);
Connection con = EasyMock.createMock(Connection.class);
expect(dataSource.getConnection()).andReturn(con);
MyBean bean = EasyMock.createMock(MyBean.class);
expect(bean.getBatchID()).andReturn(BigDecimal.valueOf(.0001))
.anyTimes();
expect(bean.getProcessType()).andReturn("Process Type").anyTimes();
replay(bean, dataSource, storedProcedure, con);
BigDecimal returnValue = null;
try {
returnValue = mysp.execute(bean);
} catch (Exception e) {
System.out.println("exception" + e.getStackTrace());// the Null pointer from JDBCTemplate is caught here.
}
Assert.assertEquals(BigDecimal.valueOf(-1), returnValue);
}
你可以發佈測試嗎? – 2013-04-04 20:55:19
測試用例發佈 – ShilR 2013-04-05 15:23:12