Mockall: cannot match expection of tower::Service for mocking aws sdk calls

I am wanting to mock aws sdk calls. The aws sdk clients take a connector that performs the interaction with the aws services. I thought I would mock the connector and then pass in a mocked connector to the aws clients.

I'm using mockall and my mocked connector looks like this:

    type SdkBody = aws_smithy_http::body::SdkBody;
    type ConnectorError = aws_smithy_http::result::ConnectorError;
    type AwsRequestBody = http::Request<SdkBody>;
    type AwsResponseBody = http::Response<SdkBody>;

    mockall::mock! {
        Connector {}
        impl tower::Service<AwsRequestBody> for Connector
            type Error = ConnectorError;
            type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>> + Send>>;
            type Response = AwsResponseBody;

            fn poll_ready<'c>(
                &mut self,
                cx: &mut std::task::Context<'c>,
            ) -> std::task::Poll<Result<(), <Self as tower::Service<AwsRequestBody>>::Error>>;

            fn call(&mut self, req: AwsRequestBody) -> <Self as tower::Service<AwsRequestBody>>::Future;
        impl Clone for Connector {
            fn clone(&self) -> Self;

I've implemented Clone because it is required by consumers of the connector.

Here is the setup of the mocked connector:

    let mut connector = MockConnector::new();
        .returning(|| MockConnector::new());
        .returning(|_| std::task::Poll::Ready(Ok(())));

The expectation on the use of clone works (but I don't care about that), but I can't get a match on calls to poll_ready with the panic:

'MockConnector::poll_ready(?): No matching expectation found'


  1. How can I create a correct matching expectation?
  2. Is there a way that I can tell mockall that I do not care about clone and poll_ready and these can always return a constant value? I'm only interested in the sequence of values that call returns (and possibly the values of the arguments it receives).