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

Moq运行异常:断言不符合预期但测试始终通过

排查建议
  • 检查DataMaintainer中DoSomething()的实现逻辑
    确认DoSomething()的返回值是否真的依赖AddData()的结果。比如如果DoSomething()未调用AddData(),或者逻辑写反(如AddData()返回true时,DoSomething()返回false),都会导致Mock设置后结果不符合预期。

  • 确认AddData()方法可被Moq拦截
    Moq仅能Mock虚方法(virtual)、抽象方法(abstract)或接口方法。如果AddData()是DataMaintainer中的非虚方法,Moq无法替换其实现,此时会执行原方法逻辑,而非你设置的返回值。

  • 检查测试中Mock实例的创建方式
    确保你是通过Moq生成DataMaintainer的代理实例:

    var mock = new Mock<DataMaintainer>();
    var instance = mock.Object;
    

    若测试中使用的是DataMaintainer的真实子类实例,Moq的设置不会生效。

  • 验证断言与预期是否匹配
    检查断言代码是否逻辑倒置,比如是否误将Assert.IsTrue(...)写成Assert.IsFalse(...),导致错误的断言被通过。

  • 验证AddData()是否被实际调用
    在测试中添加Moq的Verify方法,确认DoSomething()确实触发了AddData()调用:

    mock.Verify(m => m.AddData(), Times.Once);
    

    若此验证失败,说明DoSomething()未调用AddData(),Mock的返回值自然不会影响结果。

  • 排查抽象类的初始化逻辑
    检查DataMaintainer的构造函数是否存在初始化操作,修改了影响DoSomething()返回值的成员变量;或者Moq实例是否被意外设置了其他属性,导致结果偏离预期。

内容的提问来源于stack exchange,提问作者user413088

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:47:14