使用xunit和Moq测试Service Fabric服务时遇NullReferenceException求助
问题:Service Fabric单元测试传递Mock对象时抛出NullReferenceException
我正在为Service Fabric应用中的服务编写基于xUnit和Moq的单元测试,传递Mock对象的代码如下:
private static DataQueueService CreateDataQueueService( Mock<IServiceBusClientFactory> serviceBusClientFactoryMock ) { // 异常在此行抛出 serviceBusClientFactoryMock ??= new Mock<IServiceBusClientFactory>(); return new UsageDataQueueService(serviceBusClientFactoryMock.Object); }
测试代码(已移除无关断言):
[Fact] public async Task QueueData() { // arrange Mock<IServiceBusClientFactory> serviceBusClientFactoryMock = new Mock<IServiceBusClientFactory>(); serviceBusClientFactoryMock .Setup(factory => factory.CreateServiceBusClient(It.IsAny<string>())) .Returns(It.IsAny<IServiceBusClient>()); // act DataQueueService dataQueueService = CreateDataQueueService(serviceBusClientFactoryMock: serviceBusClientFactoryMock); }
运行时在指定行抛出NullReferenceException,现有信息是否足够排查问题?
现有信息不足以完全定位问题,需要补充以下关键内容:
UsageDataQueueService的构造函数实现细节,尤其是它如何使用传入的IServiceBusClientFactory实例的逻辑- 异常的完整堆栈跟踪,明确NullReferenceException的具体触发位置(比如是
serviceBusClientFactoryMock本身为null,还是访问其Object属性时出错,或是构造函数内部使用依赖时触发) - 注意当前测试中用
It.IsAny<IServiceBusClient>()作为CreateServiceBusClient的返回值,这会返回null,如果UsageDataQueueService在构造函数或初始化过程中直接调用该方法并使用返回的客户端,也会导致空引用异常
内容的提问来源于stack exchange,提问作者MChak
相关产品推荐
相关产品推荐

