我使用Moq框架进行单元测试,并且遇到了这个有趣的问题。Moq Equals只适用于IEquatable
public interface Bar : IEquatable<Bar>
{
}
[TestClass]
public class TestClass
{
Mock<Bar> a;
Mock<Bar> b;
public TestClass()
{
a = new Mock<Bar>();
b = new Mock<Bar>();
a.Setup(bar => bar.Equals(b.Object)).Returns(true);
}
[TestMethod]
public void AssertEqualsTest()
{
Assert.AreEqual(a.Object, b.Object); //fails
}
[TestMethod]
public void AssertIsTrueTest()
{
Assert.IsTrue(a.Object.Equals(b.Object)); //passes
}
}
首次发行
所以Assert.AreEqual
只是失败。即使大多数(如果不是全部)我的类继承自IEquatable,我也不想在第二次测试中使用该行。
你可能会认为失败,因为安装程序仅设置IEquality.Equals()函数(Assert.AreEqual
可能不检查),但如果你行
a.Setup(x => x.Equals((object)b.Object)).Returns(true);
添加到构造,但仍失败。
第二期
如果从接口声明注释掉: IEquatable<Bar>
(这样a.Setup
覆盖object.Equals
),这两个测试失败。
我希望的结果是能够在Mock
对象上设置等于并呼叫Assert.AreEqual
。
为什么你想比较模拟生成的对象'Mock'? –
JaredPar
要以不同的方式询问@ JaredPar的问题,测试的对象/单元是什么? – manojlds
它是在另一个类上测试一个相等运算符。这个功能一直没有成功,所以我进入它并注意到两者并不像我想的那样平等。 – hehewaffles