使用 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>());
当我尝试验证是否使用 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>());