ソース 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);
}
}
}