Entity framework 如何使用种子数据对实体框架进行单元测试
我认为用种子创建的数据测试我的VS2015 EF代码第一个项目是有意义的。我不清楚在设置、拆卸和实际测试方面,测试项目中应该包含什么Entity framework 如何使用种子数据对实体框架进行单元测试,entity-framework,ef-code-first,Entity Framework,Ef Code First,我认为用种子创建的数据测试我的VS2015 EF代码第一个项目是有意义的。我不清楚在设置、拆卸和实际测试方面,测试项目中应该包含什么 有没有人能给我举个例子来说明这一点?另外,我是否认为这是一种测试(种子数据)的好方法。我没有找到这样的例子。我看到的示例似乎更为复杂,而不是模拟数据。您没有指定是否使用MSTest,但我今天遇到了这个问题,这就是我使用MSTest所做的。此基本测试类在运行的第一个测试上处理种子设定。Initialize(false)使它不会在二次测试运行时尝试初始化,因此只有第一
有没有人能给我举个例子来说明这一点?另外,我是否认为这是一种测试(种子数据)的好方法。我没有找到这样的例子。我看到的示例似乎更为复杂,而不是模拟数据。您没有指定是否使用MSTest,但我今天遇到了这个问题,这就是我使用MSTest所做的。此基本测试类在运行的第一个测试上处理种子设定。Initialize(false)使它不会在二次测试运行时尝试初始化,因此只有第一个测试支付安装价格。因为每个测试都在一个事务中,所以它们将回滚在每个测试中所做的更改
[TestClass]
public abstract class EntityFrameworkTest
{
private static bool _hasSeeded;
protected TransactionScope Scope;
[TestInitialize]
public void Initialize()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<YourContext, YourModelNameSpace.Migrations.Configuration>());
using (var context = new YourContext())
{
context.Database.Initialize(false);
if (!_hasSeeded)
{
context.AnEntity.AddOrUpdate(c => c.EntityName, new AnEntity {EntityName = "Testing Entity 1"});
context.SaveChanges();
_hasSeeded = true;
}
}
Scope = new TransactionScope();
}
[TestCleanup]
public void CleanUp()
{
Scope.Dispose();
}
[AssemblyCleanup]
public static void KillDb()
{
using (var context = new YourContext())
context.Database.Delete();
}
}
[TestClass]
公共抽象类EntityFrameworkTest
{
需要私有静态布尔;
受保护的交易范围;
[测试初始化]
公共无效初始化()
{
SetInitializer(新的MigrateDatabaseToLatestVersion());
使用(var context=newyourcontext())
{
context.Database.Initialize(false);
如果(!\u需要)
{
context.AnEntity.AddOrUpdate(c=>c.EntityName,新的AnEntity{EntityName=“Testing Entity 1”});
SaveChanges();
_hasSeeded=正确;
}
}
范围=新事务处理范围();
}
[测试清理]
公共空间清理()
{
Scope.Dispose();
}
[组装清理]
publicstaticvoidkilldb()
{
使用(var context=newyourcontext())
context.Database.Delete();
}
}
还值得注意的是,我使用上下文设置为查找的连接字符串(ConnStringName)设置了我的测试项目app.config。这里的愿望是,每台devs机器只需在其本地数据库中创建一个测试数据库,而不必在实际的SQL实例设置不同的情况下将连接字符串更改为其他内容。此外,根据您是否为VS 2015,您的本地DB数据源可能会有所不同
<add name="ConnStringName" connectionString="Data Source=(localdb)\MSSQLLocalDB; Initial Catalog=DbNameTestingInstance; Integrated Security=True; MultipleActiveResultSets=True;Application Name=Testing Framework;" providerName="System.Data.SqlClient" />