La expresión hace referencia a un método que no pertenece al objeto burlado

Tengo un servicio de API que llama a otro servicio de API. Cuando configuré los objetos simulados, falló con un error:

NotSupportedException: la expresión hace referencia a un método que no pertenece al objeto burlado.

Este es el 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() });
}

Yo leoPruebas de expresión con Moq Pero no funcionó para mi caso. Si elimino esto_mockCarrierService.Setup(), el caso de prueba puede ejecutarse pero falla con unNullReferenceException porque no tenía una validezList<IQueryable<AccountSearchModel>> preparar.

¿Alguna idea de cómo puedo lograr esto?

Nota al pie: Solución actual

FWIW, aquí está la solución que uso actualmente.Soy todo oídos para un mejor enfoque del problema. (hasta que Moq comience a admitir métodos de extensión de burla).

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 al pie: marco de burla alternativo

También he encontrado un marco de burla comercial que admite el método de extensión de burla y un enlace a los documentos de procedimientos:Telerik JustMock.

Respuestas a la pregunta(2)

Su respuesta a la pregunta