使用Spring调用存储过程时失败的JUnit测试

时间:2012-04-27 11:03:50

标签: java plsql oracle11g junit4 spring-jdbc

我是Spring JDBC的新手。我有3个没有共享数据的JUnit测试(没有所需的方法之前/之后,因为他们在自己的数据文件中有自己的数据)

这些测试中的每一个都调用包内的存储过程。如果我单独运行测试,它们都会通过,但运行所有三个,一个失败:(如果我改变了类中测试的顺序,那么失败的测试会发生变化)

对存储过程的调用使用Spring JDBC:

 SimpleJdbcCall callProcedure = new SimpleJdbcCall(jdbcTemplate)
                .withCatalogName("ADMIN.CALCULATE")
                .withProcedureName("GET_TOTALS")
                .useInParameterNames("account_no", "request_list")
                .withoutProcedureColumnMetaDataAccess()
                .declareParameters(
                        new SqlParameter("account_no", Types.INTEGER),
                        new SqlParameter("request_list", OracleTypes.ARRAY, "ADMIN.CALC_REQUEST_TAB"),
                        new SqlOutParameter("response_list", OracleTypes.ARRAY, "ADMIN.CALC_RESPONSE_TAB"));
        callProcedure.compile();
        Map<String, Object> inputParams = new HashMap<String, Object>();
        // set StructDescriptor and ArrayDescriptor
        genericTypeDTO.setStructDescriptorName("ADMIN.T_CALC_REQUEST_TYPE");
        genericTypeDTO.setArrayDescriptorName("ADMIN.CALC_REQUEST_TAB");
                   inputParams.put("account_no", accountNo);
        inputParams.put("clawback_list", genericTypeDTO);
        Map<String, Object> outData = (Map<String, Object>) callProcedure.execute(inputParams);

以下是在其中一个测试中点击 callProcedure.execute(inputParams)时引发的异常:

  

引起:org.springframework.jdbc.BadSqlGrammarException:   CallableStatementCallback;糟糕的SQL语法[{call   ADMIN.CALCULATE.GET_TOTALS(?,?,?)}];嵌套异常是   java.sql.SQLException:ORA-06533:超出计数的下标ORA-06512:at   “ADMIN.CALCULATE”,第2160行ORA-06512:第1行

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

我认为你需要看一下模拟框架。看起来您的单元测试彼此相关。单元测试实际上必须是无关的,你可以通过使用模拟实现这一点。