[英]Mocking Azure ServiceBusClient dependency not working with AutoFixture.AutoMoq Freeze
以下 class 依赖于来自 Azure.Messaging.ServiceBus NuGet package 的 ServiceBusClient(用于发送 Azure 服务总线消息):
public class MyService {
private readonly ServiceBusClient _serviceBusClient;
public MyService(ServiceBusClient serviceBusClient) {
_serviceBusClient = serviceBusClient;
}
public async Task SendServiceBusMessageAsync() {
var sender = _serviceBusClient.CreateSender("Topic_Name");
// Send the message
}
}
当 mocking 使用 Moq 的 ServiceBusClient 依赖项如下时,它按预期工作,并且对 CreateSender 的调用返回设置中指定的内容:
var mockServiceBusClient = new Mock<ServiceBusClient>();
mockServiceBusClient.Setup(s => s.CreateSender(It.IsAny<string>())).Returns(new Mock<ServiceBusSender>().Object);
var sut = new MyService(MockServiceBusClient.Object);
await sut.SendServiceBusMessageAsync();
当尝试使用 AutoFixture.AutoMoq 进行相同操作时,如下所示,出现以下错误:AutoFixture.ObjectCreationExceptionWithPath 无法解析连接字符串; 它要么格式不正确,要么不包含众所周知的标记。
fixture = new Fixture();
fixture.Customize(new AutoMoqCustomization());
var mockServiceBusClient = fixture.Freeze<Mock<ServiceBusClient>>();
mockServiceBusClient.Setup(s => s.CreateSender(It.IsAny<string>())).Returns(new Mock<ServiceBusSender>().Object);
var sut = fixture.Create<MyService>();
await sut.SendServiceBusMessageAsync();
有谁知道如何让它与 AutoFixture.AutoMoq 一起使用?
我查看了 ServiceBusClient,发现无参数构造函数受到保护,而公共构造函数采用连接字符串。 我猜 AutoFixture.AutoMoq 使用的是后者,但据我所知,它使用的是 Moq。 为什么直接用最小起订量就可以正常工作?
我想我只是将该方法拉入另一个 class,然后注入并模拟它,但最好理解为什么会发生这种情况。
您可以使用 OmitAutoProperties 构建一个,这样它就不会尝试传递连接字符串:
var mockServiceBusClient = fixture.Build<Mock<ServiceBusClient>>().OmitAutoProperties().Create();
fixture.Inject(mockServiceBusClient);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.