我对单元测试和起订量有点陌生,我正在努力测试以下代码:
public void SendObject()
{
/* Some operations */
SendAsync(text)
}
private async Task SendAsync(string text)
{
var sender = _senderCreator.CreateSender(_config.SomeValue)
sender.SendMessageAsync(text)
sender.CloseAsync()
}
我的一般想法是验证 sender.CloseAsync() 是否已执行,但到目前为止,我还无法做到这一点。 我尝试模拟 CreateSender 和发送者方法调用,但没有运气。 老实说,我什至没想到它会起作用,但我必须尝试一些东西。
_senderCreator.Setup(x => x.CreateSender(It.IsAny<string>())).Returns(new SenderInstance());
senderMock.Setup(x => x.SendMessageAsync(It.IsAny<string>(), It.IsAny<CancellationToken>()))
.Returns(Task.CompletedTask);
senderMock.Setup(x => x.CloseAsync(It.IsAny<CancellationToken>())).Returns(Task.CompletedTask);
我想这需要重构,但我无法做到这一点......
有什么建议吗?
问题是您返回的是实际实例而不是模拟对象。
_senderCreator.Setup(x => x.CreateSender(It.IsAny<string>())).Returns(senderMock);
假设
senderMock
模拟 ISenderInstance
,以便它可以与发件人类型正常工作。