使用moq时包含的问题

时间:2011-08-01 09:24:21

标签: c# moq equals contains

我想测试删除方法。 删除方法在模拟服务中调用(不用moq模拟)。

该服务管理对象列表。对象的类派生自覆盖equals()的基类。

 public override bool Equals(object obj) {
        if (obj == null || GetType() != obj.GetType()) {
            return false;
        }

        BaseClass testObj = (BaseClass)obj;
        return BusinessId.Equals(testObj.BusinessId);

    }

当我打电话

 serive.GetAll().Contains(objectInList);

我弄错了。

不调用基类中的Equals方法。 列表中的对象使用moq进行模拟。

 Mock<TypeOfObject> objectMock = new Mock<TypeOfObject>();
 objectMock.SetupGet(pf => pf.BusinessId).Returns(guid);
 return objectMock.Object;

我如何设置模拟调用基类的Equals-Methode并且Contains-method返回true?

提前致谢。

2 个答案:

答案 0 :(得分:5)

你可以让mock通过设置Mock.CallBase属性调用你的Equals方法,例如:


Mock<TypeOfObject> objectMock = new Mock<TypeOfObject>();
objectMock.SetupGet(pf => pf.BusinessId).Returns(guid);
objectMock.CallBase = true;
return objectMock.Object;

答案 1 :(得分:0)

由于你的GetType()检查,它失败了。您传递的对象是Mock,而不是BaseClass

试试这个:

public override bool Equals(object obj)
{
    if (obj != null && obj is BaseClass)
    {
        return BusinessId.Equals((obj as BaseClass).BusinessId);
    }
    else
    {
        return false;
    }
}