Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
201 views
in Technique[技术] by (71.8m points)

.net core - Moq returns values based on arguments

need small help about returning values based on arguments. Setup of mocking contains expressions like

mockingObject
  .Setup(_=>_.Select(It.IsAny<Expression<Func<Entity, bool>>>(),
                        It.IsAny<Func<IQueryable<Entity>, IOrderedQueryable<Entity>>>(),
                        It.IsAny<List<Expression<Func<Entity, object>>>>(), It.IsAny<int?>(), It.IsAny<int?>())))
  .ReturnsAsync((Expression<Func<Entity,bool>>,Func<IQueryable<Entity>, IOrderedQueryable<Entity>>,List<Expression<Func<Entity,object>>>,int, int,EntityList());

But I'm getting error that Expression<Func<Entity,bool>> is a type which is not valid give context. How should I manage Returns?

Need to mock:

public async Task<Result> UpdateNetworkStatus(string id, NetworkStatus status)
{
    var network = _unitOfWork.NetworkRepository.SelectListAsync(x => x.Id == id).Result.FirstOrDefault();
    if (network == null)
        throw new Exception(nameof(network));
    network.Status = status;
    _unitOfWork.NetworkRepository.Update(network);
    var saved = await _unitOfWork.Commit();
    if (!saved)
        return Result.Failure(new List<string>
        {
            "Failed to save"
        });
    return Result.Success();
}

Here I need to mock all possible scenarios.

question from:https://stackoverflow.com/questions/65841279/moq-returns-values-based-on-arguments

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Here is the example how I had manage to pass args to returns

   unitOfWorkMock.Setup(_ => _.EntityRepository.SelectListAsync(It.IsAny<Expression<Func<Entity, bool>>>(),
                It.IsAny<Func<IQueryable<Entity>, IOrderedQueryable<Entity>>>(),
                It.IsAny<List<Expression<Func<Entity, object>>>>(), It.IsAny<int?>(), It.IsAny<int?>()))
            .ReturnsAsync((Expression<Func<Entity, bool>> filter, Func<IQueryable<Entity>, IOrderedQueryable<Entity>> orderBy, List<Expression<Func<Entity, object>>> includes, int? page, int? pageSize) =>
            {
                if (filter == null)
                    return Entities();
                return Entities().AsQueryable().Where(filter).ToList();
            });

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...