C#test project在运行测试之前擦除数据库

时间:2012-09-25 14:08:24

标签: asp.net-mvc-3 sql-server-2008 unit-testing

我有一个ASP.NET MVC3应用程序,我需要测试数据库包装器类。这已启动并正在运行。但是我需要在测试开始时重新创建数据库。我需要擦除数据库中的所有数据。数据库是测试双倍。

我有创建数据库的SQL脚本。现在我在“SQL Server管理器”中运行这个manualy,它的工作原理。但是我希望在新的测试运行之前运行该脚本。

任何人都知道怎么做?

2 个答案:

答案 0 :(得分:1)

编辑 - 用一个体面的答案代替。

创建一个如下所示的C#类 -

using System;
using NUnit.Framework;

namespace NUnit.Tests
{
  [SetUpFixture]
  public class MySetUpClass
  {
    [OneTimeSetUp]
    public void RunBeforeAnyTests()
    {
      // Set up my database with SQL scripts run via SqlCommand
    }

    [OneTimeTearDown]
    public void RunAfterAnyTests()
    {
      // tear down my database  with SQL scripts run via SqlCommand
    }
  }
}

这应该只在任何测试之前运行一次,然后在所有测试完成后才拆掉一次。

我意识到我正在从死里复活这个,但我觉得是时候得到了一个不错的答案。

无论如何,还有更好的方法。模拟你的数据层并测试它。然后确定使用SQL Server完成的所有操作都采用存储过程和函数的形式。然后使用Visual Studio为这些sprocs和函数创建单元测试。

如果您的存储库中有逻辑,我建议抓取Insight.Database并使用其AutoInterface功能。这样,您的存储库层只是一个界面,您可以轻松地模拟并继续前进。

答案 1 :(得分:1)

将此代码放在单元测试类中。您应该在此处创建所有数据库。 TestInitialize在任何测试开始之前运行。无论何时开始单元测试,都会发生这种情况。

    [TestInitialize]
    public void TestInitialize()
    {
        -
    }