作为参考,我一直在使用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的真实数据填充它,我会很高兴。