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

Java 使用Spring调用存储过程时JUnit测试失败,java,plsql,oracle11g,junit4,spring-jdbc,Java,Plsql,Oracle11g,Junit4,Spring Jdbc,我对SpringJDBC真的很陌生。我有3个JUnit测试,它们没有共享数据(不需要before/after方法,因为它们在自己的数据文件中有自己的数据) 每个测试都调用包中的存储过程。如果我单独运行测试,它们都通过了,但运行了所有三个测试,其中一个失败:(如果我更改类中测试的顺序,则失败的一个会更改) 对存储过程的调用使用Spring JDBC: SimpleJdbcCall callProcedure = new SimpleJdbcCall(jdbcTemplate)

我对SpringJDBC真的很陌生。我有3个JUnit测试,它们没有共享数据(不需要before/after方法,因为它们在自己的数据文件中有自己的数据)

每个测试都调用包中的存储过程。如果我单独运行测试,它们都通过了,但运行了所有三个测试,其中一个失败:(如果我更改类中测试的顺序,则失败的一个会更改)

对存储过程的调用使用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);
SimpleJdbcCall callProcedure=newsimplejdbccall(jdbcTemplate)
.withCatalogName(“管理计算”)
.withProcedureName(“获取总计”)
.useInParameterNames(“帐户号”、“请求列表”)
.withoutProcedureRecolumnMetadataAccess()的
.申报参数(
新的SqlParameter(“account_no”,Types.INTEGER),
新的SqlParameter(“请求列表”,OracleTypes.ARRAY,“ADMIN.CALC\u请求选项卡”),
新的SqlOutParameter(“response_list”,OracleTypes.ARRAY,“ADMIN.CALC_response_TAB”);
callProcedure.compile();
Map inputParams=new HashMap();
//设置StructDescriptor和ArrayDescriptor
genericTypeDTO.setStructDescriptorName(“ADMIN.T_CALC_REQUEST_TYPE”);
genericTypeDTO.setArrayDescriptorName(“管理计算请求”选项卡);
输入参数put(“账号”,账号);
inputParams.put(“回拨列表”,genericTypeDTO);
Map outData=(Map)callProcedure.execute(inputParams);
以下是在对其中一个测试执行调用过程时引发的异常。执行(inputParams):

原因:org.springframework.jdbc.badsqlgramarException: CallableStatementCallback;错误的SQL语法[{调用 管理计算获取_总计(?,?)}];嵌套异常是 java.sql.SQLException:ORA-06533:超出计数的下标ORA-06512:at “管理计算”,第2160行ORA-06512:第1行


任何建议都将不胜感激。

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