获取 System.NullReferenceException:模拟时对象引用未设置为对象的实例

Getting System.NullReferenceException : Object reference not set to an instance of an object while mocking

提问人:MChak 提问时间:1/20/2023 最后编辑:MChak 更新时间:1/23/2023 访问量:496

问:

我正在使用 xunit 和 moq 为服务结构应用程序中的服务编写单元测试。

我像这样通过嘲笑

private static DataQueueService CreateDataQueueService(
            Mock<IServiceBusClientFactory> serviceBusClientFactoryMock )
        {
            // Exception is being thrown at this line below
            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);
           
        }

我收到 Null 引用异常。请帮忙。这么多的背景信息是否足以回答这个问题,还是需要更多细节?

asp.net 单元测试 最小起订量 xunit nullreferenceexception

评论

0赞 Alexander Petrov 1/20/2023
异常究竟在哪里抛出?
0赞 MChak 1/20/2023
@AlexanderPetrov serviceBusClientFactoryMock ??= 新 Mock<IServiceBusClientFactory>();
0赞 Nkosi 1/20/2023
到底想做什么?这可能是一个 XY 问题
0赞 Alexander Petrov 1/21/2023
我认为你的问题是.必须返回 concrete instance 或 mock。Returns(It.IsAny<IServiceBusClient>()IServiceBusClient

答:

0赞 MChak 1/23/2023 #1

正如 @Alexander Petrov 在评论中指出的那样,问题出在 Returns(It.IsAny()。它必须返回具体实例或 IServiceBusClient 模拟。