### Question:
ProtoInterfaceImpl implements ProtoInterface { @Override public <T extends Request> Maybe<Response> sendRequest(T requestData) { require("request", requestData); if (!requestData.responseType().equals(ResponseType.PING) && responseQueue.peek(requestData.responseType())) { onError.accept(ClientError.RESPONSE_NOT_CONSUMED, Collections.emptyList()); return Maybe.empty(); } Maybe<Response> responseMaybe = s2Client.waitForResponse(requestData.responseType()); s2Client.request(requestData); countUses.compute(requestData.responseType(), (responseType, count) -> count != null ? ++count : 1); responseQueue.offer(requestData.responseType(), responseMaybe); return responseMaybe; }  @Override boolean connectToGame(
            S2Controller theGame,
            Integer connectionTimeoutInMillis,
            Integer requestTimeoutInMillis,
            Boolean traced); @Override boolean connectToGame(
            String address,
            Integer port,
            Integer connectionTimeoutInMillis,
            Integer requestTimeoutInMillis,
            Boolean traced); @Override Maybe<Response> sendRequest(T requestData); @Override Maybe<Response> sendRequest(BuilderSyntax<T> requestDataBuilder); @Override Optional<Response> waitForResponse(Maybe<Response> waitFor); @Override void quit(); @Override boolean pollResponse(ResponseType type); @Override boolean hasResponsePending(ResponseType type); @Override boolean hasResponsePending(); @Override Maybe<Response> getResponsePending(ResponseType type); @Override GameStatus lastStatus(); @Override String getConnectToIp(); @Override Integer getConnectToPort(); @Override String getDataVersion(); @Override Integer getBaseBuild(); @Override Map<ResponseType, Integer> getCountUses(); @Override String toString();  }### Answer:
@Test void throwsExceptionIfRequestIsNotProvided() { assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> new ProtoInterfaceImpl().sendRequest((Request) null)) .withMessage("request is required"); assertThatExceptionOfType(IllegalArgumentException.class) .isThrownBy(() -> new ProtoInterfaceImpl().sendRequest((BuilderSyntax<Request>) null)) .withMessage("request is required"); }