【问题标题】:Why some events don't get raised when mocking WCF with Moq?为什么在使用 Moq 模拟 WCF 时没有引发某些事件?
【发布时间】:2026-02-09 07:35:01
【问题描述】:

我的代码如下所示:

mockSecurityService
    .Setup(s => s.CreateUserWithRolesAsync(
        It.IsAny<MembershipRoles>(),
        It.IsAny<string>(),
        It.IsAny<MembershipCreateStatus>()))
    .Raises(p => p.CreateUserWithRolesCompleted += null,
        new CreateUserWithRolesCompletedEventArgs(new object[] { mr },
            null, false, null)
    );

但是当CreateUserWithRolesAsync() 被调用时,Moq 中的事件不会被引发。知道为什么吗?我查看了很多文档,应该提出它,因为签名匹配(It.IsAny&lt;T&gt; 正确匹配所有类型)。

【问题讨论】:

  • 您可以发布您的测试代码(例如,您如何在测试方法中订阅/调用它)?您设置模拟的方式似乎是正确的,这意味着问题出在其他地方。

标签: c# wcf unit-testing mocking moq


【解决方案1】:

在我看来,您必须使用方法 CreateUserWithRolesAsync 的不同签名。因此,调用CreateUserWithRolesAsync() 将不会匹配具有三个参数的调用的设置。

为了进一步帮助您,您需要发布 CreateUserWithRolesAsync 的所有不同签名以及不起作用的测试。

【讨论】: