进行集成测试时如何让visual studio运行一次TestInitialize?

Quo*_*ter 3 c# integration-testing entity-framework

当我运行所有测试时,使用[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' 中插入重复的键行。重复的键值为 (Person 1)。该语句已终止..

插入数据需要一些时间,所以我宁愿不为我拥有的每个测试方法删除和重新创建数据库。

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

Sri*_*vel 6

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

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