Для справки, я использовал этот поток для помощи.
Я реализую 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.