NUnit测试无法使用Entity Framework ToListAsync()

时间:2015-10-16 18:02:19

标签: entity-framework-6.1 nunit-2.6

源IQueryable没有实现IDbAsyncEnumerable。 只有实现IDbAsyncEnumerable的源才能用于Entity Framework异步操作。 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=287068

我是NUnit的新手。 我为`异步查询开发了Nunit测试用例。 但我犯了错误。我引用了https://msdn.microsoft.com/en-us/data/dn314429.aspx链接,但没有能力 解决错误。

任何形式的帮助将不胜感激! 提前谢谢!

公共接口IWork:IDisposable     {         IBlogRepository BlogRepository {get; }

    IDBContext Db { get; }
}

 public class BlogRepository : GenericRepository<Blog>, IBlogRepository
{

    internal ContainerRepository(IWork work)
        : base(work)
    {

    }
}
public interface IBlogRepository : IGenericRepository<Blog>
{

}
 [TestFixture] 
public class AsyncQueryTests 
{ 
    [Test] 
    public async Task GetAllBlogsAsync_orders_by_name() 
    { 
        using (var work = ObjectFactory.GetInstance<IWork>())
        {
        var data = new List<Blog> 
        { 
            new Blog { Name = "BBB" }, 
            new Blog { Name = "ZZZ" }, 
            new Blog { Name = "AAA" }, 
        }.AsQueryable(); 

        var mockSet = new Mock<DbSet<Blog>>(); 
        mockSet.As<IDbAsyncEnumerable<Blog>>() 
            .Setup(m => m.GetAsyncEnumerator()) 
            .Returns(new TestDbAsyncEnumerator<Blog>(data.GetEnumerator())); 

        mockSet.As<IQueryable<Blog>>() 
            .Setup(m => m.Provider) 
            .Returns(new TestDbAsyncQueryProvider<Blog>(data.Provider)); 

        mockSet.As<IQueryable<Blog>>().Setup(m => m.Expression).Returns(data.Expression); 
        mockSet.As<IQueryable<Blog>>().Setup(m => m.ElementType).Returns(data.ElementType); 
        mockSet.As<IQueryable<Blog>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator()); 

        var mockContext = new Mock<IWork>(); 
        mockContext.Setup(c => c.BlogRepository.GetQuery()).Returns(mockSet.Object); 
        ObjectFactory.Configure(cfg => cfg.For<IWork>().Use(mockContext.Object));

            foreach (var blog in mockSet.Object)
                {
                    mockContext.Object.BlogRepository.Add(blog);

                }

        var service = new BlogController(); 
        var blogs = await service.GetAllBlogsAsync(); 

        Assert.AreEqual(3, blogs.Count);           
    } 
} 

}

0 个答案:

没有答案