我有一个 ASP.NET MVC3 应用程序,我需要在其中测试一个数据库包装类。这是启动和运行。但是我需要在测试开始时重新创建数据库。我需要擦除数据库中的所有数据。该数据库是一个测试替身。
我有创建数据库的 SQL 脚本。现在我在“SQL Server Manager”中手动运行它并且它可以工作。但我想在新的测试运行之前运行脚本。
有人知道怎么做吗?
我有一个 ASP.NET MVC3 应用程序,我需要在其中测试一个数据库包装类。这是启动和运行。但是我需要在测试开始时重新创建数据库。我需要擦除数据库中的所有数据。该数据库是一个测试替身。
我有创建数据库的 SQL 脚本。现在我在“SQL Server Manager”中手动运行它并且它可以工作。但我想在新的测试运行之前运行脚本。
有人知道怎么做吗?
将此代码放在您的单元测试类中。您应该在此处创建所有数据库。TestInitialize 在任何测试开始之前运行。这将发生一次,每次开始单元测试时。
[TestInitialize]
public void TestInitialize()
{
-
}
编辑 - 用一个体面的答案代替。
创建一个如下所示的 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 为这些存储过程和函数创建单元测试。
如果您的存储库中有逻辑,我建议您使用Insight.Database并利用其 AutoInterface 功能。这样,您的存储库层只是一个接口,您可以轻松地模拟并继续前进。