使用 NSubstitute 抛出异常验证是否调用了异步方法

Verify that an async method was called using NSubstitute throws exception

当我尝试验证是否使用 NSubstitute 调用了异步方法时,我收到一条错误消息

NSubstitute extension methods like .Received() can only be called on objects created using Substitute.For() and related methods

下面是一些示例代码来说明我的观点:

    public interface ISender
    {
       Task Send(string message);
    }
    public class Service
    {
        private readonly ISender _sender;

        public Service(ISender sender)
        {
            _sender = sender;
        }

        public async Task SendMessage(List<string> messages)
        {
            foreach (var message in messages)
            {
               await _sender.Send(message);
            }
        }
    }
    [Test]
    public async Task Test_Async_Method()
    {
        var mock = Substitute.For<ISender>();

        var service = new Service(mock);
        var messages = new List<string>{"Foo","Bar"};
       await service.SendMessage(messages);

        mock.Send(Arg.Any<string>()).Received(2);
    }

我知道问题是我正在验证 Task 而不是 mock.Send(Arg.Any<string>()),但我能做些什么呢?

你应该反转调用:

mock.Received(2).Send(Arg.Any<string>());

来源:http://nsubstitute.github.io/help/received-calls/