### Question:
NettyClientTransport implements ConnectionClientTransport { @Override public String toString() { return MoreObjects.toStringHelper(this) .add("logId", logId.getId()) .add("remoteAddress", remoteAddress) .add("channel", channel) .toString(); } NettyClientTransport(
      SocketAddress address, Class<? extends Channel> channelType,
      Map<ChannelOption<?>, ?> channelOptions, EventLoopGroup group,
      ProtocolNegotiator negotiator, int flowControlWindow, int maxMessageSize,
      int maxHeaderListSize, long keepAliveTimeNanos, long keepAliveTimeoutNanos,
      boolean keepAliveWithoutCalls, String authority, @Nullable String userAgent,
      Runnable tooManyPingsRunnable, TransportTracer transportTracer, Attributes eagAttributes,
      LocalSocketPicker localSocketPicker); @Override void ping(final PingCallback callback, final Executor executor); @Override ClientStream newStream(
      MethodDescriptor<?, ?> method, Metadata headers, CallOptions callOptions); @SuppressWarnings("unchecked") @Override Runnable start(Listener transportListener); @Override void shutdown(Status reason); @Override void shutdownNow(final Status reason); @Override String toString(); @Override InternalLogId getLogId(); @Override Attributes getAttributes(); @Override ListenableFuture<SocketStats> getStats(); @Override SocketAddress getAddress();  }### Answer:
@Test public void testToString() throws Exception { address = TestUtils.testServerAddress(12345); authority = GrpcUtil.authorityFromHostAndPort(address.getHostString(), address.getPort()); String s = newTransport(newNegotiator()).toString(); transports.clear(); assertTrue("Unexpected: " + s, s.contains("NettyClientTransport")); assertTrue("Unexpected: " + s, s.contains(address.toString())); }