如何使用Moq设置数据可查询数据
我有责任(IMediaCoverageReponsitory)。
public interface IMediaCoverageRepository : RepositoryAsync<MediaCoverage>
我使用Moq创建Moq IMediaCoverageRepository
var mockFactory = new MockRepository(MockBehavior.Strict) {
DefaultValue = DefaultValue.Mock
};
var mockMediaRepository = mockFactory.Create<IMediaCoverageRepository>();
我有一个列表示例:
var listOfMediaCoverages = new List<MediaCoverage>()
{
new MediaCoverage { MediaCoverageId = 1, Name = "Media 10", IsActive = true },
new MediaCoverage {MediaCoverageId = 2, Name = "Media 100", IsActive = true },
new MediaCoverage {MediaCoverageId = 3, Name = "Media 1000", IsActive = false }
};
之后,我使用listOfMediaCoverage Fake Into Mock MediaCoverageRepository设置数据
var queryableListMediaCoverage = listOfMediaCoverages.ToArray().AsQueryable();
mockMediaRepository.Setup(r => r.Queryable(null).GetEnumerator()).Returns(queryableListMediaCoverage.GetEnumerator());
mockMediaRepository.Setup(r => r.Queryable(null).Provider).Returns(queryableListMediaCoverage.Provider);
mockMediaRepository.Setup(r => r.Queryable(null).ElementType).Returns(queryableListMediaCoverage.ElementType);
mockMediaRepository.Setup(r => r.Queryable(null).Expression).Returns(queryableListMediaCoverage.Expression);
==&GT;我收到错误: **无法转换
类型的对象'System.Linq.EnumerableQuery`1[Pacman2.Core.Entities.MediaCoverage]' to type 'Moq.IMocked'.**
请帮我解决这个问题。我已经在google上搜索并在此链接上尝试解决方案,但无法解决问题
<links>
http://davidcondemarin.blogspot.com/2012/07/testing-sarp-lite-repositories-with-moq.html
</links>
答案 0 :(得分:0)
mockMediaRepository.As<IQueryable<MediaCoverage>>().Setup(m => m.Provider).Returns(queryableListMediaCoverage.Provider);
mockMediaRepository.As<IQueryable<MediaCoverage>>().Setup(m => m.Expression).Returns(queryableListMediaCoverage.Expression);
mockMediaRepository.As<IQueryable<MediaCoverage>>().Setup(m => m.ElementType).Returns(queryableListMediaCoverage.ElementType);
mockMediaRepository.As<IQueryable<MediaCoverage>>().Setup(m => m.GetEnumerator()).Returns(queryableListMediaCoverage.GetEnumerator());
答案 1 :(得分:0)
我用这段代码解决了
mockMediaRepository.Setup(r => r.Queryable(It.IsAny())).Returns(queryableListMediaCoverage)
==&GT;代号是我想填充方法Queryable,返回IQueryable。而且Moq已经为我填充了它。