ValuesDoFnFactory implements ParDoFnFactory { @Override public ParDoFn create( PipelineOptions options, CloudObject cloudUserFn, List<SideInputInfo> sideInputInfos, TupleTag<?> mainOutputTag, Map<TupleTag<?>, Integer> outputTupleTagsToReceiverIndices, DataflowExecutionContext<?> executionContext, DataflowOperationContext operationContext) throws Exception { return new ValuesParDoFn<>(); }  @Override ParDoFn create(
      PipelineOptions options,
      CloudObject cloudUserFn,
      List<SideInputInfo> sideInputInfos,
      TupleTag<?> mainOutputTag,
      Map<TupleTag<?>, Integer> outputTupleTagsToReceiverIndices,
      DataflowExecutionContext<?> executionContext,
      DataflowOperationContext operationContext);  }
@Test public void testConversionOfRecord() throws Exception { ParDoFn parDoFn = new ValuesDoFnFactory() .create( null , CloudObject.fromSpec(ImmutableMap.of(PropertyNames.OBJECT_TYPE_NAME, "ValuesDoFn")), null , null , null , null , null ); List<Object> outputReceiver = new ArrayList<>(); parDoFn.startBundle(outputReceiver::add); parDoFn.processElement(valueInGlobalWindow(KV.of(42, 43))); assertThat(outputReceiver, contains(valueInGlobalWindow(43))); }