每次使用Moq调用方法时,如何使Mock返回一个新列表

Flo*_*anu 14 .net c# moq mocking

我正在使用MOQ模拟带有预期返回列表的方法调用.我的方法返回一个列表,但我希望每次调用该方法时,mock都会创建一个新列表.到目前为止我做了什么:

List<Correlation> expected = new List<Correlation> { new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } };
Mock<IRPLValidator> selfMock = new Mock<IRPLValidator>();
selfMock.Setup(f => f.Validate()).Returns(expected);
Run Code Online (Sandbox Code Playgroud)

我想要实现的是每次调用方法时模拟返回一个新列表.我试过这个但是没有用:

selfMock.Setup(f => f.Validate()).Returns(new List<Correlation>{ new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } });
Run Code Online (Sandbox Code Playgroud)

由于这没有用,我想也许回调是我的问题的答案,但我没有找到重新初始化我的列表的任何正确的例子.有什么建议?

你可能想知道我为什么每次都需要一个新的列表,问题是我在不同的对象类型上调用方法在列表中进行一些更改,具体取决于对象类型.因为每次调用方法时mock都会给我相同的列表,所以我总是在内存中修改相同的对象,因此我无法跟踪我正在进行的更改.

提前致谢!

Ran*_*ric 17

selfMock.Setup(f => f.Validate()).Returns(() => new List<Correlation>{ new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } });
Run Code Online (Sandbox Code Playgroud)

您需要将Return中的值转换为函数.您尝试的版本创建了一个列表,然后返回刚才使用的那个.这样,每次创建列表时,返回将在每次需要时调用该函数.