[英]Moq - Setup .Equals method to return false
我不知道如何使Moq在对象上设置.Equals方法。 以下断言失败:
var Song = new Mock<ISong>();
Song.Setup(x => x.Equals(Song.Object))
.Returns(false);
Assert.IsFalse(Song.Object.Equals(Song.Object));
换句话说, Song.Object.Equals(Song.Object)
始终返回true。
是否可以用Moq
模拟.Equals
方法? 我想念什么?
这是Castle.Core的限制(Moq和其他模拟框架(如NSubstitute)在内部使用)。 它不能覆盖System.Object
定义的虚拟方法,即ToString
, Equals
和GetHashCode
。
解决方法是在继承树中的某个位置手动覆盖这些方法。
例如,这将失败:
public class Class {}
var m = Mock.Of<Class>(c =>
c.Equals(It.IsAny<object>()) == true
);
Assert.True(m.Equals(null));
但这将通过:
public class Class
{
public override bool Equals(object o) => base.Equals(o);
}
var m = Mock.Of<Class>(c =>
c.Equals(It.IsAny<object>()) == true
);
Assert.True(m.Equals(null));
由于使用的是接口,因此只需在其上声明方法: bool Equals(object o);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.