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

