Создать тестовую базу данных LocalDB для интеграционных тестов - PullRequest
0 голосов
/ 24 октября 2018

Для справки, я использовал этот поток для помощи.

Я реализую NUnit Интеграционные тесты конечных точек REST нашего контроллера в проекте .NET Web API 2.Мы используем подход Entity Framework code-first from database для создания наших моделей и контроллеров.Это все, что мы используем Entity для - у нас нет ни отдельного проекта уровня доступа к данным, ни папки Migrations и т. Д.

У меня есть основной проект api иapiIntegrationTests проект. Моя цель состоит в том, чтобы в моем проекте IntegrationTests использовалась база данных LocalDB (заполненная данными из базы данных dev) отдельно от нашей базы данных разработки.

В проекте apiIntegrationTests яустановить ConnectionString в App.config для экземпляра LocalDb:

<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, который я вызываю выше.Intellisense выдает ошибку, поскольку MyDbContext еще не создано.Я не знаю, с чего начать или что MyDbContext должен делать.

Моя цель с MyDbContext.cs, Я думаю - заполнить мой экземпляр Integration Test LocalDB с помощью DbSet моего выбора получены из моей исходной базы данных разработки, которую я использую в основном проекте api. Правильно или нет?

Может кто-нибудь поделиться со мной некоторыми знаниями?Я не уверен, что заполнение моей базы данных Integration Test всеми данными из dev db в каждом тесте - хорошая идея, так как это довольно большая база данных.Я надеюсь, что пока могу просто указать некоторые таблиц из dev db, а затем найти лучшее решение для тестирования dev позже (хостинг в памяти?).Прямо сейчас я был бы счастлив, если бы мог успешно создать эту LocalDb тестовую базу данных и заполнить ее реальными данными из dev db.

...