使用moq时包含的问题



我想测试一个删除方法。delete方法在模拟服务中调用(而不是用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);

I get false.

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

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

我如何设置模拟,基类的equals方法被调用,contains方法返回true?

可以通过设置mock使mock调用Equals方法。CallBase属性为true,例如:

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

由于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;
    }
}

最新更新