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.