I have some codes like below, I want to write unit tests my method. But I\'m stuck in async methods. Can you help me please ?
public class Panel
{
publi
You could implement an AsyncEnumerable
which can be used like this:
private readonly IQueryable panels = new AsyncEnumerable(new List()
{
panel
});
Here is the implementation of it:
public class AsyncEnumerable : EnumerableQuery, IAsyncEnumerable, IQueryable
{
public AsyncEnumerable(IEnumerable enumerable) : base(enumerable) { }
public AsyncEnumerable(Expression expression) : base(expression) { }
public IAsyncEnumerator GetEnumerator()
{
return new AsyncEnumerator(this.AsEnumerable().GetEnumerator());
}
IQueryProvider IQueryable.Provider => new AsyncQueryProvider(this);
}
The AsyncEnumerator
class:
public class AsyncEnumerator : IAsyncEnumerator
{
private readonly IEnumerator _inner;
public AsyncEnumerator(IEnumerator inner)
{
_inner = inner;
}
public void Dispose()
{
_inner.Dispose();
}
public T Current => _inner.Current;
public Task MoveNext(CancellationToken cancellationToken)
{
return Task.FromResult(_inner.MoveNext());
}
}
The AsyncQueryProvider
class:
public class AsyncQueryProvider : IAsyncQueryProvider
{
private readonly IQueryProvider _inner;
internal AsyncQueryProvider(IQueryProvider inner)
{
_inner = inner;
}
public IQueryable CreateQuery(Expression expression)
{
return new AsyncEnumerable(expression);
}
public IQueryable CreateQuery(Expression expression)
{
return new AsyncEnumerable(expression);
}
public object Execute(Expression expression)
{
return _inner.Execute(expression);
}
public TResult Execute(Expression expression)
{
return _inner.Execute(expression);
}
public IAsyncEnumerable ExecuteAsync(Expression expression)
{
return new AsyncEnumerable(expression);
}
public Task ExecuteAsync(Expression expression, CancellationToken cancellationToken)
{
return Task.FromResult(Execute(expression));
}
}