NUnit test not working with Entity Framework ToListAsync()

556 Views Asked by At

The source IQueryable doesn't implement IDbAsyncEnumerable. Only sources that implement IDbAsyncEnumerable can be used for Entity Framework asynchronous operations. For more details see http://go.microsoft.com/fwlink/?LinkId=287068.

I am new to NUnit. I have developed the Nunit test cases for` async queries. But I am getting above error. I refereed https://msdn.microsoft.com/en-us/data/dn314429.aspx link but not able to solve error.

Any kind of help will be appreciated! Thanks in advance!

public interface 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

There are 0 best solutions below