3333import org .junit .jupiter .api .BeforeEach ;
3434import org .junit .jupiter .api .Test ;
3535import org .mockito .ArgumentCaptor ;
36- import org .springframework .beans .factory .BeanFactory ;
3736import org .springframework .core .convert .converter .Converter ;
3837import org .springframework .dao .DataAccessException ;
3938import org .springframework .data .convert .ReadingConverter ;
@@ -163,14 +162,9 @@ void cachesCustomMapperAndExtractorInstances() {
163162 @ Test // GH-1721
164163 void obtainsCustomRowMapperRef () {
165164
166- BeanFactory beanFactory = mock (BeanFactory .class );
167- JdbcQueryMethod queryMethod = createMethod ("findAllCustomRowMapperRef" );
168- StringBasedJdbcQuery query = createQuery (queryMethod );
169- query .setBeanFactory (beanFactory );
170-
171165 CustomRowMapper customRowMapper = new CustomRowMapper ();
172-
173- when ( beanFactory . getBean ( "CustomRowMapper" )). thenReturn ( customRowMapper );
166+ JdbcQueryMethod queryMethod = createMethod ( "findAllCustomRowMapperRef" );
167+ StringBasedJdbcQuery query = createQuery ( queryMethod , "CustomRowMapper" , customRowMapper );
174168
175169 RowMapper <?> rowMapper = query .determineRowMapper (queryMethod .getResultProcessor (), false );
176170 ResultSetExtractor <Object > resultSetExtractor = query .determineResultSetExtractor (() -> {
@@ -184,14 +178,9 @@ void obtainsCustomRowMapperRef() {
184178 @ Test // GH-1721
185179 void obtainsCustomResultSetExtractorRef () {
186180
187- BeanFactory beanFactory = mock (BeanFactory .class );
188- JdbcQueryMethod queryMethod = createMethod ("findAllCustomResultSetExtractorRef" );
189- StringBasedJdbcQuery query = createQuery (queryMethod );
190- query .setBeanFactory (beanFactory );
191-
192181 CustomResultSetExtractor cre = new CustomResultSetExtractor ();
193-
194- when ( beanFactory . getBean ( "CustomResultSetExtractor" )). thenReturn ( cre );
182+ JdbcQueryMethod queryMethod = createMethod ( "findAllCustomResultSetExtractorRef" );
183+ StringBasedJdbcQuery query = createQuery ( queryMethod , "CustomResultSetExtractor" , cre );
195184
196185 RowMapper <?> rowMapper = query .determineRowMapper (queryMethod .getResultProcessor (), false );
197186 ResultSetExtractor <Object > resultSetExtractor = query .determineResultSetExtractor (() -> {
@@ -332,10 +321,10 @@ void queryByListOfTuples() {
332321 String [][] tuples = { new String [] { "Albert" , "Einstein" }, new String [] { "Richard" , "Feynman" } };
333322
334323 SqlParameterSource parameterSource = forMethod ("findByListOfTuples" , List .class ) //
335- .withArguments (Arrays .asList (tuples )) //
324+ .withArguments (Arrays .asList (tuples ))//
336325 .extractParameterSource ();
337326
338- assertThat (parameterSource .getValue ("tuples" )).asInstanceOf (LIST ) //
327+ assertThat (parameterSource .getValue ("tuples" )).asInstanceOf (LIST )//
339328 .containsExactly (tuples );
340329
341330 assertThat (parameterSource .getSqlType ("tuples" )).isEqualTo (JdbcUtil .TYPE_UNKNOWN .getVendorTypeNumber ());
@@ -441,7 +430,11 @@ private JdbcQueryMethod createMethod(String methodName, Class<?>... paramTypes)
441430 }
442431
443432 private StringBasedJdbcQuery createQuery (JdbcQueryMethod queryMethod ) {
444- return new StringBasedJdbcQuery (queryMethod , operations , defaultRowMapper , converter , evaluationContextProvider );
433+ return createQuery (queryMethod , null , null );
434+ }
435+
436+ private StringBasedJdbcQuery createQuery (JdbcQueryMethod queryMethod , String preparedReference , Object value ) {
437+ return new StringBasedJdbcQuery (queryMethod , operations , new StubRowMapperFactory (preparedReference , value ), converter , evaluationContextProvider );
445438 }
446439
447440 interface MyRepository extends Repository <Object , Long > {
@@ -636,4 +629,37 @@ public Object getRootObject() {
636629 }
637630 }
638631
632+ private class StubRowMapperFactory implements AbstractJdbcQuery .RowMapperFactory {
633+
634+ private final String preparedReference ;
635+ private final Object value ;
636+
637+ StubRowMapperFactory (String preparedReference , Object value ) {
638+ this .preparedReference = preparedReference ;
639+ this .value = value ;
640+ }
641+
642+ @ Override
643+ public RowMapper <Object > create (Class <?> result ) {
644+ return defaultRowMapper ;
645+ }
646+
647+ @ Override
648+ public RowMapper <Object > rowMapperByReference (String reference ) {
649+
650+ if (preparedReference .equals (reference )) {
651+ return (RowMapper <Object >) value ;
652+ }
653+ return AbstractJdbcQuery .RowMapperFactory .super .rowMapperByReference (reference );
654+ }
655+
656+ @ Override
657+ public ResultSetExtractor <Object > resultSetExtractorByReference (String reference ) {
658+
659+ if (preparedReference .equals (reference )) {
660+ return (ResultSetExtractor <Object >) value ;
661+ }
662+ return AbstractJdbcQuery .RowMapperFactory .super .resultSetExtractorByReference (reference );
663+ }
664+ }
639665}
0 commit comments