### Question:
GrpcTccClientMessageSender implements TccMessageSender { @Override public AlphaResponse tccTransactionStart(TccStartedEvent tccStartEvent) { GrpcAck grpcAck = tccBlockingEventService.onTccTransactionStarted(convertTo(tccStartEvent)); return new AlphaResponse(grpcAck.getAborted()); } GrpcTccClientMessageSender(ServiceConfig serviceConfig,
      ManagedChannel channel,
      String address,
      TccMessageHandler handler,
      LoadBalanceContext loadContext); @Override void onConnected(); @Override void onDisconnected(); @Override ServerMeta onGetServerMeta(); @Override void close(); @Override String target(); @Override AlphaResponse participationStart(ParticipationStartedEvent participationStartedEvent); @Override AlphaResponse participationEnd(ParticipationEndedEvent participationEndedEvent); @Override AlphaResponse tccTransactionStart(TccStartedEvent tccStartEvent); @Override AlphaResponse tccTransactionStop(TccEndedEvent tccEndEvent); @Override AlphaResponse coordinate(CoordinatedEvent coordinatedEvent);  }### Answer:
@Test public void serviceOnTransactionStartTest() { final GrpcTccTransactionStartedEvent[] requestCaptor = new GrpcTccTransactionStartedEvent[1]; TccStartedEvent event = new TccStartedEvent(globalTxId,localTxId); TccEventServiceImplBase serviceImpl = new TccEventServiceImplBase() { public void onTccTransactionStarted(GrpcTccTransactionStartedEvent request, io.grpc.stub.StreamObserver<GrpcAck> responseObserver) { requestCaptor[0] = request; responseObserver.onNext(ack); responseObserver.onCompleted(); } }; serviceRegistry.addService(serviceImpl); AlphaResponse response =service.tccTransactionStart(event); assertThat(requestCaptor[0].getServiceName(), is(serviceConfig.serviceName())); assertThat(requestCaptor[0].getInstanceId(), is(serviceConfig.instanceId())); assertThat(requestCaptor[0].getGlobalTxId(), is(globalTxId)); assertThat(requestCaptor[0].getLocalTxId(), is(localTxId)); assertThat(response.aborted(), is(false)); }