### Question:
ReactiveStockRepository { @NonNull public Mono<Stock> findById(@NonNull String symbol, @NonNull Instant date) { BoundStatement bound = findById.bind(symbol, date); ReactiveResultSet rs = session.executeReactive(bound); return Mono.fromDirect(rs).map(rowMapper); } ReactiveStockRepository(
      CqlSession session,
      @Qualifier("stocks.prepared.insert") PreparedStatement insert,
      @Qualifier("stocks.prepared.deleteById") PreparedStatement deleteById,
      @Qualifier("stocks.prepared.findById") PreparedStatement findById,
      @Qualifier("stocks.prepared.findBySymbol") PreparedStatement findBySymbol,
      Function<Row, Stock> rowMapper); @NonNull Mono<Stock> save(@NonNull Stock stock); @NonNull Mono<Void> deleteById(@NonNull String symbol, @NonNull Instant date); @NonNull Mono<Stock> findById(@NonNull String symbol, @NonNull Instant date); @NonNull Flux<Stock> findAllBySymbol(
      @NonNull String symbol,
      @NonNull Instant start,
      @NonNull Instant end,
      long offset,
      long limit);  }### Answer:
@Test void should_find_stock_when_find_by_id_given_valid_input() { given(findById.bind(stock1.getSymbol(), stock1.getDate())).willReturn(bound); given(session.executeReactive(bound)).willReturn(new MockReactiveResultSet(row1)); given(row1.getString(SYMBOL)).willReturn(stock1.getSymbol()); given(row1.getInstant(DATE)).willReturn(stock1.getDate()); given(row1.getBigDecimal(VALUE)).willReturn(stock1.getValue()); var stockRepository = new ReactiveStockRepository(session, insert, delete, findById, findBySymbol, rowMapper); var mono = stockRepository.findById(stock1.getSymbol(), stock1.getDate()); StepVerifier.create(mono).expectNext(stock1).expectComplete().verify(); verify(session).executeReactive(bound); }