C# 在进行集成测试时,如何使visual studio运行TestInitialize一次?

C# 在进行集成测试时,如何使visual studio运行TestInitialize一次?,c#,entity-framework,integration-testing,C#,Entity Framework,Integration Testing,当我运行所有测试时,使用[TestInitialize]属性修饰的方法将针对我拥有的每个测试方法执行 测试类型为集成测试,用于测试数据库访问逻辑。在具有[TestInitialize]属性的方法中,我将一些测试数据插入数据库,当多次执行时,会导致以下异常: 结果消息:初始化方法 …FilterRepositoryTests.Initialize 抛出异常。System.Data.Entity.Infrastructure.DbUpdateException: System.Data.Entity

当我运行所有测试时,使用
[TestInitialize]
属性修饰的方法将针对我拥有的每个测试方法执行

测试类型为集成测试,用于测试数据库访问逻辑。在具有
[TestInitialize]
属性的方法中,我将一些测试数据插入数据库,当多次执行时,会导致以下异常:

结果消息:初始化方法 …FilterRepositoryTests.Initialize 抛出异常。System.Data.Entity.Infrastructure.DbUpdateException: System.Data.Entity.Infrastructure.DbUpdateException:发生错误 在更新条目时。有关详细信息,请参见内部异常。--> System.Data.Entity.Core.UpdateException:运行时出错 更新条目。有关详细信息,请参见内部异常。--> System.Data.SqlClient.SqlException:无法在中插入重复的键行 具有唯一索引“IX_Name”的对象“dbo.User”。复制钥匙 值为(人1)。该声明已被终止

插入数据需要一些时间,因此我不希望为我拥有的每个测试方法删除并重新创建数据库

那么,我如何才能对所有测试只执行一次初始化/设置方法呢?

您可以使用属性,该属性将对该类中的所有测试方法调用一次


完成测试后,您可能需要使用属性进行清理。

如果您只想为整个测试类设置一次数据,您是否查看了
ClassInitialize
属性?不,我不知道它的存在,但这很有效!谢谢