### Question:
ClientCalls { public static <ReqT, RespT> StreamObserver<ReqT> asyncClientStreamingCall( ClientCall<ReqT, RespT> call, StreamObserver<RespT> responseObserver) { return asyncStreamingRequestCall(call, responseObserver, false); } private  ClientCalls(); static void asyncUnaryCall(
      ClientCall<ReqT, RespT> call, ReqT req, StreamObserver<RespT> responseObserver); static void asyncServerStreamingCall(
      ClientCall<ReqT, RespT> call, ReqT req, StreamObserver<RespT> responseObserver); static StreamObserver<ReqT> asyncClientStreamingCall(
      ClientCall<ReqT, RespT> call,
      StreamObserver<RespT> responseObserver); static StreamObserver<ReqT> asyncBidiStreamingCall(
      ClientCall<ReqT, RespT> call, StreamObserver<RespT> responseObserver); static RespT blockingUnaryCall(ClientCall<ReqT, RespT> call, ReqT req); static RespT blockingUnaryCall(
      Channel channel, MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, ReqT req); static Iterator<RespT> blockingServerStreamingCall(
      ClientCall<ReqT, RespT> call, ReqT req); static Iterator<RespT> blockingServerStreamingCall(
      Channel channel, MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, ReqT req); static ListenableFuture<RespT> futureUnaryCall(
      ClientCall<ReqT, RespT> call, ReqT req); static Object getArgumentFromRequest(Object request);  }### Answer:
@Test public void cannotSetOnReadyAfterCallStarted() throws Exception { NoopClientCall<Integer, String> call = new NoopClientCall<Integer, String>(); CallStreamObserver<Integer> callStreamObserver = (CallStreamObserver<Integer>) ClientCalls.asyncClientStreamingCall(call, new NoopStreamObserver<String>()); Runnable noOpRunnable = new Runnable() { @Override public void run() { } }; try { callStreamObserver.setOnReadyHandler(noOpRunnable); fail("Should not be able to set handler after call started"); } catch (IllegalStateException ise) { } }