创建用于集成测试的LocalDB测试数据库

时间:2018-10-23 22:24:26

标签: c# entity-framework asp.net-web-api nunit integration-testing

作为参考,我一直在使用this thread寻求帮助。

我正在NUnit项目中实现我们的控制器REST端点的.NET Web API 2集成测试。我们使用Entity Framework code-first from database方法来创建模型和控制器。这就是我们使用Entity的全部-我们没有单独的数据访问层项目,也没有Migrations文件夹,等等。

我有我的主要api项目和一个apiIntegrationTests项目。 我的目标是让我的IntegrationTests项目使用与我们的开发数据库分开的LocalDB数据库(使用dev数据库中的数据填充)。

apiIntegrationTests项目中,我在App.config中为LocalDb实例设置了一个ConnectionString:

<add name ="TestDatabase" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Database=TestDatabase;Integrated Security=True"/>

我创建了一个基类,希望该基类将在每次运行NUnit集成测试时运行。这可能有错误:

TestSetup.cs

using NUnit.Framework;
using System.Data.Entity;
using System.Transactions;

    namespace api.IntegrationTests
    {
        public class TestSetup
        {
            // What is this?
            protected MyDbContext DbContext;

            protected TransactionScope TransactionScope;

            // Maps to connection string in App.config
            public const string TestDatabaseName = "TestDatabase";

            [SetUp]
            public void SetUp()
            {
                // Create the database if it doesn't exist
                DbContext = new MyDbContext(TestDatabaseName);
                DbContext.Database.CreateIfNotExists();

                TransactionScope = new TransactionScope(TransactionScopeOption.RequiresNew);
            }

            [TearDown]
            public void TearDown()
            {
                if (TransactionScope != null)
                    TransactionScope.Dispose();
            }
        }
    }

创建上述的MyDbContext类时遇到麻烦。由于尚未创建MyDbContext,因此Intellisense会引发错误。我不知道从哪里开始或MyDbContext应该做什么。

我认为MyDbContext.cs的目标是我想,是用从我原来的开发数据库派生的DbSet来填充我的Integration Test LocalDB实例。在主要的api项目中使用。 正确还是不正确?

有人能对我有所了解吗?我不确定在每个测试中用来自dev db的所有数据填充我的Integration Test db是否是一个好主意,因为它是一个非常大的数据库。我希望现在可以只从dev db中指定表的 some ,然后为以后的开发测试找到更好的解决方案(内存托管?)。现在,如果我能够成功创建此LocalDb测试数据库并使用来自dev db的真实数据填充它,我会很高兴。

0 个答案:

没有答案