BigtableDataClientWrapper implements IBigtableDataClient { @Override public ApiFuture<Void> mutateRowAsync(RowMutation rowMutation) { ListenableFuture<MutateRowResponse> response = delegate.mutateRowAsync(rowMutation.toProto(requestContext)); return ApiFutureUtil.transformAndAdapt( response, new Function<MutateRowResponse, Void>() { @Nullable @Override public Void apply(@Nullable MutateRowResponse mutateRowResponse) { return null; } }); } BigtableDataClientWrapper(
      BigtableDataClient bigtableDataClient, RequestContext requestContext); @Override void mutateRow(RowMutation rowMutation); @Override ApiFuture<Void> mutateRowAsync(RowMutation rowMutation); @Override Row readModifyWriteRow(ReadModifyWriteRow readModifyWriteRow); @Override ApiFuture<Row> readModifyWriteRowAsync(ReadModifyWriteRow readModifyWriteRow); @Override IBulkMutation createBulkMutationBatcher(String tableId); @Override ApiFuture<Boolean> checkAndMutateRowAsync(ConditionalRowMutation conditionalRowMutation); @Override Boolean checkAndMutateRow(ConditionalRowMutation conditionalRowMutation); @Override List<KeyOffset> sampleRowKeys(String tableId); @Override ApiFuture<List<KeyOffset>> sampleRowKeysAsync(String tableId); @Override ResultScanner<Row> readRows(Query request); @Override ApiFuture<List<Row>> readRowsAsync(Query request); @Override List<FlatRow> readFlatRowsList(Query request); @Override ResultScanner<FlatRow> readFlatRows(Query request); @Override ApiFuture<List<FlatRow>> readFlatRowsAsync(Query request); @Override void readFlatRowsAsync(Query request, StreamObserver<FlatRow> observer);  }
@Test public void testMutateRowAsync() { RowMutation rowMutation = RowMutation.create(TABLE_ID, "key"); MutateRowRequest request = rowMutation.toProto(REQUEST_CONTEXT); ListenableFuture<MutateRowResponse> response = Futures.immediateFuture(MutateRowResponse.getDefaultInstance()); when(client.mutateRowAsync(request)).thenReturn(response); clientWrapper.mutateRowAsync(rowMutation); verify(client).mutateRowAsync(request); }