Я пытаюсь использовать Moq (4.10) для асинхронных вызовов, но не могу понять, как это работает.
Узнайте, как это сделать, и нашли ответы, которые я пробовал, но не могу заставить их работать.
Это мой тест
public class Test
{
[Fact]
public void Test_Create()
{
var repositoryMock = new Mock<IRepository>();
repositoryMock
.Setup(repo => repo.CreateAsync(It.IsAny<Aggregate >()))
.Returns(Task.CompletedTask);
/// also tried this
/// => .Returns(Task.FromResult(default(object)))
/// and
/// => .Returns(Task.FromResult(false)));
var useCase = new CreateUseCase(repositoryMock.Object);
Task.Run(async () => { await useCase.HandleAsync(new CreateRequest()); });
repositoryMock.VerifyAll();
}
}
ресурсов
Как я могу сказать Moq вернуть задание?
Получение этого исключения
Moq.MockException: 'Следующие настройки на макете
«Mock <.Repository.IRepository: 00000001>» не найдено: IRepository
repo => repo.CreateAsync (It.IsAny ())
Репо выглядит так
public interface IRepository
{
Task CreateAsync(Aggregate aggregate);
}
UseCase
public class CreateUseCase : IUseCaseHandler<CreatRequest>
{
private IRepository _repository;
public CreateUseCase (IRepository repository)
{
_repository= repository?? throw new System.ArgumentNullException(nameof(repository));
}
public async Task HandleAsync(CreateRequest request, CancellationToken? cancellationToken = null)
{
Aggregate aggregate = new Aggregate();
aggregate.Create();
await _repository.CreateAsync(aggregate);
}
}
Репозиторий
public sealed class OrderRepository : ProxyRepository<OrderAggregate>, IOrderRepository
{
public OrderRepository(IUnitOfWork unitOfWork, INotificationDispatcher eventHandler)
: base(unitOfWork, eventHandler)
{
}
async Task IRepository.CreateAsync(Aggregate aggregate)
{
await base.AddAsync(aggregate);
}
}
Что я делаю неправильно или отсутствует?