【发布时间】:2019-12-10 09:32:57
【问题描述】:
我做了类似的事情:How to mock an async repository with Entity Framework Core 在我的一个单元测试项目 .net core 2.1 中。现在尝试将其更新到 3.0 预览版,但 IAsyncQueryProvider 出现了一些错误。
所以当我更新我的项目时。我的单元测试有一些问题。实际上,IAsyncEnumerable 将 GetEnumerator 切换为 GetAsyncEnumerator。解决了这个问题。此外,一些接口发生了变化,必须在我的代码中实现。
我的问题是 IAsyncQueryProvider 女巫添加了 TResult IAsyncQueryProvider.ExecuteAsync(Expression expression, CancellationToken cancelToken) ,我不知道该怎么办,因为自从我更新到 getAsyncEnumerator 我进入我的这部分代码并且不能让它工作,因为我不知道如何返回 TResult
我试过了:
return Execute<TResult>(expression);
return _inner.Execute<TResult>(expression);
throw new NotImplementedException();(:p sorry had to)
internal class TestAsyncQueryProvider<TEntity> : IAsyncQueryProvider
{
private readonly IQueryProvider _inner;
internal TestAsyncQueryProvider(IQueryProvider inner)
{
_inner = inner;
}
public IQueryable CreateQuery(Expression expression)
{
return new TestAsyncEnumerable<TEntity>(expression);
}
public IQueryable<TElement> CreateQuery<TElement>(Expression expression)
{
return new TestAsyncEnumerable<TElement>(expression);
}
public object Execute(Expression expression)
{
return _inner.Execute(expression);
}
public TResult Execute<TResult>(Expression expression)
{
return _inner.Execute<TResult>(expression);
}
public IAsyncEnumerable<TResult> ExecuteAsync<TResult>(Expression expression)
{
return new TestAsyncEnumerable<TResult>(expression);
}
public Task<TResult> ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
{
return Task.FromResult(Execute<TResult>(expression));
}
TResult IAsyncQueryProvider.ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
我的测试应该像在 .net core 2.1 中一样通过
【问题讨论】:
-
这方面有什么更新吗?我遇到了同样的问题...
-
没有找到任何解决方案。我的一位同事完全更改了代码。对不起。
-
@SébastienHonorine 您能否提供有关您的同事如何改变这一点的任何细节?我也在尝试升级并遇到模拟 IQueryable 的问题。
标签: c#