【发布时间】:2022-01-11 07:33:39
【问题描述】:
在运行 Azure 服务总线方法 SendAsync 的单元测试时,我在行 _queueClient.Verify() 上收到以下异常:
预期至少对模拟调用一次,但从未执行过:x => x.SendAsync({MessageId:})
这是我的单元测试:
public CustomerSendMsg(){ } //ctor
public async Task ShouldSendMessage()
{
var _queueClient = new Mock<IQueueClient>();
var _sut = new Publisher(_queueClient.Object);
var customer = new Customer()
{
FirstName = "John",
LastName = "Doe"
};
_queueClient.Setup(t => t.SendAsync(It.IsAny<Message>())).Returns(Task.CompletedTask).Verifiable();
await _sut.SendMessageAsync(customer);
var messageBody = JsonSerializer.Serialize(customer);
var msg = new Message(Encoding.UTF8.GetBytes(messageBody));
_queueClient.Verify(t = > t.SendAsync(msg));
}
这是来自 Publisher 类的 SendMessageAsync 方法:
public async Task SendMessageAsync<T>(T obj)
{
var messageBody = JsonSerializer.Serialize(obj);
var msg = new Message(Encoding.UTF8.GetBytes(messageBody));
await _queueClient.SendAsync(msg);
}
你知道我怎样才能使这个单元测试工作吗?
【问题讨论】:
-
我认为问题在于 Moq 检查两个变量是否引用相同的对象。但真正的大问题是您只是将代码从被测方法复制到您的断言部分。如果此代码有错误,您将永远找不到它。
标签: c# unit-testing moq azureservicebus