C# 如何确保在每个循环中创建一个新的人员?

C# 如何确保在每个循环中创建一个新的人员?,c#,unit-testing,nunit,moq,C#,Unit Testing,Nunit,Moq,请参阅下面的代码,这是我单元测试的一部分: mockPersonFactory.Setup(m => m.Create()).Returns(PersonFactory()); public IPerson PersonFactory() { IPerson iPerson = new Person(); return iPerson; } PersonFactory应该被多次调用(因为它包含在测试代码的循环中)。但是,它不是每次在循环中创建一个新的Person,而是每

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

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

public IPerson PersonFactory()
{
    IPerson iPerson = new Person();
    return iPerson;
}
PersonFactory
应该被多次调用(因为它包含在测试代码的循环中)。但是,它不是每次在循环中创建一个新的
Person
,而是每次都重用同一个Person对象。如何确保在每个循环中创建一个新的人员?

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

mockPersonFactory.Setup(m => m.Create()).Returns(() => PersonFactory());
或者只是:

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

.Returns(PersonFactory)
我相信也可以。谢谢。Person对象由Castle Windsor在测试代码中创建。在单元测试中这样做是可以接受的,还是我也应该对模拟对象使用IOC?再次感谢+答案是1——它有效。这取决于你测试的内容。在几乎所有情况下,我不会在单元测试期间使用IOC容器,因为您应该自己提供依赖项(作为模拟或存根)。请随意发布另一个更详细的问题。