Moq验证Entity Framework Core下Update方法从未被调用的配置问题
解决方法
在MockBehavior.Strict模式下,所有mock对象可能被调用的成员都必须提前配置Setup,否则一旦触发调用就会直接抛出未配置的异常,无法走到后续的Verify校验步骤。你只需为IContentDataStore.Update方法添加对应Setup即可,由于该方法是void类型,无需配置返回值,空Setup就可以满足要求:
配置方式1:精准匹配要验证的参数
如果只允许接收existingRequest实例的调用不触发Strict模式异常,可以直接配置和Verify逻辑参数一致的Setup:
ContentStoreMock.Setup(repo => repo.Update(existingRequest));
配置方式2:允许任意同类型参数的调用
如果想要覆盖所有同类型参数的Update调用,避免Strict模式抛未配置异常,可以匹配任意参数:
// 请将代码中的T替换为existingRequest对应的实际实体类型 ContentStoreMock.Setup(repo => repo.Update(It.IsAny<T>()));
注意事项
- 配置完Setup后,原有
ContentStoreMock.Verify(repo => repo.Update(existingRequest), Times.Never );校验逻辑无需修改,即可正常生效 - 如果使用了匹配任意参数的Setup,不要修改Verify的参数为
It.IsAny<T>(),否则校验逻辑会变成「验证所有Update方法都从未被调用」,和你原始的校验指定实例未被调用的需求不符
内容的提问来源于stack exchange,提问作者MicMit
相关产品推荐
相关产品推荐

