Moq从Setup返回不同的对象

本文关键字:对象 返回 Setup Moq | 更新日期: 2023-09-27 18:03:24

您能告诉场景返回的对象何时可能与设置对象不同吗?

在执行src代码时,在Setup中调试时设置的Object Id不同。

interface IBaseClass
{
    IFactory aFactory;
}
class Point
{
    Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
    int x;
    int y;
}
interface Factory
{
    public AnObject create(string a, Point pt);
}

测试代码

var anObjectMock = new Mock<AnObject> { DefaultValue = DefaultValue.Mock };
var sMatcher = It.Is<string>(s => s.Equals("aString"));
var ptMatcher = It.Is<Point>(p => (p.x == CONST_X && p.y == CONST_Y));
var FactoryMock = Mock.Get<IFactory>(IBaseClassMock.Object.Factory);
FactoryMock.Setup(f => f.create(sMatcher, ptMatcher)).Returns(anObjectMock.Object); // Say ObjectId is #1

SRC-

Object obj = BasicImaging.Factory.create("aString", new Point(CONST_X, CONST_Y)); 
// Getting no ObjectId

Moq从Setup返回不同的对象

BasicImaging.Factory是实际的mock(IBaseClassMock.Factory(吗?我认为没有。

您需要将mock注入BasicImaging.Factory中,以便它使用您的mock而不是实际代码。

您应该使用IBaseClassMock.Object.Factory(即您设置的mock(而不是BasicImaging.Factory