获得 System.Reflection.TargetInvocationException 呼叫 Mock.Object

Getting System.Reflection.TargetInvocationException for a call to Mock.Object

我不确定为什么会这样,但是当我尝试调用 userIdProvider.GetUserId(_mockHubConnectionContext.Object) 时,它会在 _mockHubConnectionContext.Object 处抛出 System.Reflection.TargetInvocationException。 我的测试构造函数 class 包括:

_mockConnectionContext = new Mock<ConnectionContext>();
_mockLoggerFactory = new Mock<ILoggerFactory>();
_mockHubConnectionContext = new Mock<HubConnectionContext>(_mockConnectionContext.Object, new HubConnectionContextOptions(), _mockLoggerFactory.Object);

UserIdProvider.GetUserId() 的方法签名是:

public string GetUserId(HubConnectionContext hubConnectionContext)

为了给您更多背景信息,当我们尝试从 .NET Core 3.1 迁移到 .NET 6.0 时,这种情况就开始了。

TargetInvocationException 是对其他东西抛出的异常的包装,因此您要做的第一件事就是查看 InnerException 以检查消息 \ 堆栈跟踪。

这有望为您指明问题所在的正确方向。

我很久以前就解决了这个问题。看到问题没有具体答案,我决定 post 自己回答。

将传递给 Mock<HubConnectionContext> 的连接上下文从模拟更改为某些具体实现,如 DefaultConnectionContext 解决了这个问题。有关导致错误的原因的更多详细信息,请参见 here