Phương pháp của bạn không có bất kỳ cuộc gọi lại nào nên không có lý do để sử dụng .CallBack()
. Bạn chỉ có thể trả về một Tác vụ với các giá trị mong muốn bằng cách sử dụng .Returns()
và Task.FromResult , ví dụ:
MyType someValue=...;
mock.Setup(arg=>arg.DoSomethingAsync())
.Returns(Task.FromResult(someValue));
Cập nhật 2014-06-22
Moq 4.2 có hai phương pháp mở rộng mới để hỗ trợ việc này.
mock.Setup(arg=>arg.DoSomethingAsync())
.ReturnsAsync(someValue);
mock.Setup(arg=>arg.DoSomethingAsync())
.ThrowsAsync(new InvalidOperationException());
Cập nhật 2016-05-05
Như Seth Hoa đề cập trong câu trả lời khác , ReturnsAsync
chỉ có sẵn cho các phương thức trả về a Task<T>
. Đối với các phương thức chỉ trả về một Tác vụ,
.Returns(Task.FromResult(default(object)))
có thể được sử dụng.
Như được hiển thị trong câu trả lời này , trong .NET 4.6, điều này được đơn giản hóa .Returns(Task.CompletedTask);
, ví dụ:
mock.Setup(arg=>arg.DoSomethingAsync())
.Returns(Task.CompletedTask);