如何确保在每个循环上创建新Person?

w00*_*977 2 c# nunit unit-testing moq

请参阅下面的代码,这是我的单元测试的一部分:

mockPersonFactory.Setup(m => m.Create()).Returns(PersonFactory());

public IPerson PersonFactory()
{
    IPerson iPerson = new Person();
    return iPerson;
}
Run Code Online (Sandbox Code Playgroud)

PersonFactory应该多次调用(因为它包含在被测试代码的循环中).但是,不是Person每次在循环中创建新的,而是每次都重用同一个人对象.如何确保在每个循环上创建新Person?

Pat*_*irk 5

您的代码只是说"使用返回值PersonFactory()作为返回值Create()." 相反,您需要指示它每次调用 PersonFactory()以获取返回值.使用Returns接受lambda 的重载:

mockPersonFactory.Setup(m => m.Create()).Returns(() => PersonFactory());
Run Code Online (Sandbox Code Playgroud)

或者只是:

mockPersonFactory.Setup(m => m.Create()).Returns(PersonFactory);
Run Code Online (Sandbox Code Playgroud)