2016-02-13 5 views
1

У меня есть общий репозиторий для MongoDB.Значение возвращаемого значения Nsubstitute с общим репозиторием

Это мой Получ:

public IList<TEntity> Get<TEntity>(System.Linq.Expressions.Expression<Func<TEntity, bool>> filter = null) where TEntity : class, new() 
{ 
    var collection = GetCollection<TEntity>(); 

    var query = Query<TEntity>.Where(filter); 
    var entity = collection.FindAs<TEntity>(query).ToList(); 

    return entity; 
} 

Когда я пытаюсь дразнить его, я получаю сообщение об ошибке:

IList<Login> (где Войти в свой бизнес-объект) не содержит каких-либо определение для ReturnsForAnyArgs ,

[TestMethod] 
public void CheckIfUserNameExits_IfUserNameDoesNotExist_ReturnFalse() 
{ 
    Login login = null; 
    Task<IList<Login>> logl = null; 
    // _mongoDAL.Get<Arg.Any<Login>()>(Arg.Any<Expression<Func<TEntity, bool>>>).ReturnsForAnyArgs 
    //_mongoDAL.When(x => x.Get<Login>(Arg.Any<Expression<Func<Login, bool>>>())).ReturnsForAnyArgs(logl); 
    _mongoDAL.Get<Login>(Arg.Any<Expression<Func<Login, bool>>>()).ReturnsForAnyArgs(logl); 
} 

Любые предложения относительно того, как издеваться над этим, чтобы я мог установить возвращаемое значение, которое я хочу в своем модульном тесте?

+0

«... не содержит определения для ReturnsForAnyArgs» - это звучит так, будто вам не хватает «использования NSubstitute;»? –

+0

Да, я включил его. :) – Strawberry

ответ

0

Проблема вызвана тем, что вы передаете неправильный тип вашему звонку ReturnsForAnyArgs. Такое поведение одно и то же, если вы вызываете Returns, или ReturnsForAnyArgs.

Ваш метод Get определяется как возвращаемый IList<TEntity>. В своем первоначальном вопросе вы возвращаете logl, который имеет тип Task<IList<Login>> (обратите внимание на Task, обертывающий ваш IList). Однако в вашем solution вместо этого вы отправите loginList, который является List<T>, который реализует IList<T>, поэтому ваш код компилируется. Итак, в качестве альтернативы вы могли бы использовать:

_mongoDAL.Get<Login>(Arg.Any<Expression<Func<Login, bool>>>()) 
     .ReturnsForAnyArgs(loginList); 

Ошибка компиляции, которую вы получаете изначально, немного загадочна. Сообщение полная ошибка:

error CS1928: 'System.Collections.Generic.IList' does not contain a definition for 'ReturnsForAnyArgs' and the best extension method overload 'NSubstitute.SubstituteExtensions.ReturnsForAnyArgs(System.Threading.Tasks.Task, T, params T[])' has some invalid arguments

первую половину сообщения об ошибке выглядит как это указывает на способ недостающего расширения. Однако на самом деле проблема в том, что она не соответствует ни одному из перегруженных методов, поэтому она выбирает ближайшую и показывает вам, как она не соответствует.

Обычно вы получите вторую ошибку, которая поможет указать, что это ваша проблема. Что-то вроде этого:

error CS1929: Instance argument: cannot convert from 'System.Collections.Generic.IList' to 'System.Threading.Tasks.Task>>'

1

Решено.

List<Login> loginList = new List<Login>() 
      { 
      }; 

    _mongoDAL.Get<Login>(Arg.Any<Expression<Func<Login, bool>>>()).Returns(loginList); 

Не знаю, почему с только что возвращается, это работает.

 Смежные вопросы

  • Нет связанных вопросов^_^