繁体   English   中英

Moq-Setup .Equals方法返回false

[英]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定义的虚拟方法,即ToStringEqualsGetHashCode

解决方法是在继承树中的某个位置手动覆盖这些方法。

例如,这将失败:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM