### Question:
CallableSqlParameterBinder extends AbstractParameterBinder<CallableStatement, SqlParameter> { @Override public void bind(CallableStatement callableStatement, List<? extends SqlParameter> parameters) throws SQLException { assertNotNull(callableStatement, parameters); BindingVisitor visitor = new BindingVisitor(query, callableStatement); for (SqlParameter parameter : parameters) { parameter.accept(visitor, null); } } CallableSqlParameterBinder(Query query); @Override void bind(CallableStatement callableStatement, List<? extends SqlParameter> parameters);  }### Answer:
@Test public void testBind() throws Exception { MockCallableStatement callableStatement = new MockCallableStatement(); List<SqlParameter> parameters = new ArrayList<>(); parameters.add(new BasicSingleResultParameter<>(IntegerWrapper::new)); parameters.add(new BasicInParameter<>(() -> new org.seasar.doma.wrapper.StringWrapper("aaa"))); parameters.add( new BasicInOutParameter<>(BigDecimalWrapper::new, new Reference<>(new BigDecimal(10)))); parameters.add( new BasicOutParameter<>( () -> new org.seasar.doma.wrapper.StringWrapper("bbb"), new Reference<>())); CallableSqlParameterBinder binder = new CallableSqlParameterBinder(new MyQuery()); binder.bind(callableStatement, parameters); List<BindValue> bindValues = callableStatement.bindValues; assertEquals(2, bindValues.size()); BindValue bindValue = bindValues.get(0); assertEquals(2, bindValue.getIndex()); assertEquals("aaa", bindValue.getValue()); bindValue = bindValues.get(1); assertEquals(3, bindValue.getIndex()); assertEquals(new BigDecimal(10), bindValue.getValue()); List<RegisterOutParameter> registerOutParameters = callableStatement.registerOutParameters; assertEquals(3, registerOutParameters.size()); }