После этого отвечать я попытался сделать что-то подобное и издеваться над интерфейсом:
public interface IGetRepository<TEntity>
{
IEnumerable<TEntity> Get(
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null);
}
Это мой метод модульного тестирования:
IEnumerable<EventModel> expectedList = return new List<MyModel>()
{
new MyModel()
{
Id = 0
}
}
using (var _mock = AutoMock.GetLoose())
{
var repositoryMock = _mock.Mock<IGenericRepository<EventModel>>();
repositoryMock
.Setup(items => items.Get(It.IsAny<Expression<Func<EventModel, bool>>>))
.Returns(() => expectedList);
}
Но It.IsAny<Expression<Func<EventModel, bool>>>
создает сообщение об ошибке:
cannot convert from 'method group' to 'Expression>'
Уже читал эти похожие вопросы: 1,2,3 , поэтому я предполагаю, что моя проблема отличается подписью, если да, то как преобразовать эту подпись, чтобы она была применима к It.IsAny
из moq
?
Попробуйте убрать Expression
из типа Is.IsAny
Также в вашем вопросе говорится, что вы хотите использовать It.Is
, но в вашем примере используется It.IsAny
. Какой из них вы пытаетесь использовать?
Привет, @Johnny, это немного неловко, но мне не хватало скобок, я не был знаком с этим синтаксисом. Спасибо!
Пожалуйста, попробуйте это
var expectedList = new List<EventModel>()
{
new EventModel()
{
Id = 0
}
};
{
var repositoryMock = new Mock<IGetRepository<EventModel>>();
repositoryMock
.Setup(items => items.Get(It.IsAny<Func<IQueryable<EventModel>, IOrderedQueryable<EventModel>>>()))
.Returns(() => expectedList);
}
Вам не хватает скобок,
items.Get(It.IsAny<Expression<Func<EventModel, bool>>>()))
?