Expressão referencia um método que não pertence ao objeto simulado

Eu tenho um serviço API que chama outro serviço API. Quando configurei os objetos Mock, ele falhou com um erro:

NotSupportedException: expression referencia um método que não pertence ao objeto simulado.

Este é o código:

private Mock<IEnumerable<ICarrierApiService<AccountSearchModel>>> _mockCarrierService;
private Mock<IApiService<AccountSearchModel>> _mockApiService;

[SetUp]
public void SetUp()
{
  _mockApiService = new Mock<IApiService<AccountSearchModel>>();
  _mockCarrierService = new Mock<IEnumerable<ICarrierApiService<AccountSearchModel>>>();
  _mockApiService.Setup(x => x.GetFromApiWithQuery(It.IsAny<string>())).Returns(ApiValue());

  // Error occurred when call _mockApiService.GetFromApiWithQuery() in .Select()
  _mockCarrierService.Setup(x => x
            .Select(s => s
                .GetFromApiWithQuery(It.IsAny<string>())).ToList())
                .Returns(new List<IQueryable<AccountSearchModel>> { ApiValue() });
}

Eu liTeste de expressão com Moq mas não funcionou para o meu caso. Se eu remover isso_mockCarrierService.Setup(), o caso de teste pode ser executado, mas falha com umNullReferenceException porque não tinha um válidoList<IQueryable<AccountSearchModel>> configuração.

Alguma idéia de como eu posso conseguir isso?

Nota de rodapé: Solução atual

FWIW, aqui está a solução que eu uso atualmente.Sou todo ouvidos para uma melhor abordagem do problema (até que o Moq comece a oferecer suporte a métodos de extensão de simulação).

private List<ICarrierApiService<AccountSearchModel>> _mockCarrierService;
private AccountSearchController _mockController;
private Mock<ICarrierApiService<AccountSearchModel>> _mockApiService;

[SetUp]
public void SetUp()
{
   _mockApiService = new Mock<ICarrierApiService<AccountSearchModel>>();
   _carrierServiceMocks = new List<ICarrierApiService<AccountSearchModel>> { _mockApiService.Object };
   _mockApiService.Setup(x => x.GetFromApiWithQuery(It.IsAny<string>())).Returns(ApiValue());
   _mockController = new AccountSearchController(_carrierServiceMocks);
}

Nota de rodapé: estrutura de zombaria alternativa

Também encontrei uma estrutura de simulação comercial que suporta o método de extensão de simulação e o link para os documentos de instruções:Telerik JustMock.

questionAnswers(2)

yourAnswerToTheQuestion