2012-09-25 68 views
0

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

我有创建数据库的SQL脚本。现在即时通讯在“SQL Server管理器”中运行该手册,它可以工作。但我希望脚本在新的测试运行之前运行。

任何人都知道如何做到这一点?

回答

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功能。这样,您的存储库层仅仅是一个界面,您可以轻松地模拟和继续。

+0

我已经有了这个脚本。我放下所有的桌子,然后回顾它们。但我无法弄清楚,在测试运行之前如何运行这个脚本。 im testing aginst数据库部署在我的本地SQLExpress服务器上。 –

+0

好吧,我想你可以从代码中做到这一点,并使用脚本的内容作为SqlCommand.Text属性。 –

1

将此代码放置在您的单元测试课程中。你应该在这里完成你所有的数据库创建。 TestInitialize在任何测试开始之前运行。这将发生一次,一次单元测试开始。

[TestInitialize] 
    public void TestInitialize() 
    { 
     - 
    } 
+0

但我没有在每次测试之前寻找一个行动来运行。 当我开始测试运行时,我只需要用.sql文件重新创建数据库。 –

相关问题