在每次测试之前更改数据库

时间:2011-02-02 07:58:26

标签: c# linq unit-testing sql-server-ce datacontext

我正在为某些方法编写一些性能分析测试,例如将客户(不同批次大小100,1000,10000)添加到数据库中的customers表。我正在使用SqlCE数据库,因为它支持LINQ。

现在为了达到理想的情况,我在每次测试之前更改数据库,以便每个测试都有相同的数据库。因为我正在使用File.Copy(),但在第二次测试中使用db.customers.FirstOrDefault()时,我收到错误“数据库文件可能已损坏。运行修复实用程序以检查数据库文件。”

我在测试后清除了数据上下文。问题也可能出在linq上。我不确定。解决这个问题的任何想法。或任何替代这种方法。任何建议都是必需的。

3 个答案:

答案 0 :(得分:1)

你不应该这样做单元测试,它容易出错且速度慢。

相反,使用数据库事务,并在测试结束时或在需要时(例如每次测试)回滚数据。

答案 1 :(得分:0)

另一种方法是使用一个函数清除db(或特定表)中的数据并将其填充到所需的启动状态。然后在开始测试之前(或在单独测试之前,根据要求)运行。使用此方法会使File.Copy()变得不必要。

答案 2 :(得分:0)

您可以将SQLite与内存数据库一起使用。

SQLiteConnection conn = new SQLiteConnection(“Data Source =:memory:”);

ps:记住leppie回答