Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何使用种子数据对实体框架进行单元测试_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework 如何使用种子数据对实体框架进行单元测试

Entity framework 如何使用种子数据对实体框架进行单元测试,entity-framework,ef-code-first,Entity Framework,Ef Code First,我认为用种子创建的数据测试我的VS2015 EF代码第一个项目是有意义的。我不清楚在设置、拆卸和实际测试方面,测试项目中应该包含什么 有没有人能给我举个例子来说明这一点?另外,我是否认为这是一种测试(种子数据)的好方法。我没有找到这样的例子。我看到的示例似乎更为复杂,而不是模拟数据。您没有指定是否使用MSTest,但我今天遇到了这个问题,这就是我使用MSTest所做的。此基本测试类在运行的第一个测试上处理种子设定。Initialize(false)使它不会在二次测试运行时尝试初始化,因此只有第一

我认为用种子创建的数据测试我的VS2015 EF代码第一个项目是有意义的。我不清楚在设置、拆卸和实际测试方面,测试项目中应该包含什么


有没有人能给我举个例子来说明这一点?另外,我是否认为这是一种测试(种子数据)的好方法。我没有找到这样的例子。我看到的示例似乎更为复杂,而不是模拟数据。

您没有指定是否使用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" />