You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:35:27