在InMemory单元测试中运行存储过程

时间:2019-03-20 17:09:39

标签: c# entity-framework asp.net-core .net-core .net-core-2.0

如何在内存数据库中运行存储过程?我正在尝试搜索此功能。

https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/in-memory

这是用于设置:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (!optionsBuilder.IsConfigured)
    {
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFProviders.InMemory;Trusted_Connection=True;ConnectRetryCount=0");
    }
}

var options = new DbContextOptionsBuilder<BloggingContext>()
                .UseInMemoryDatabase(databaseName: "Find_searches_url")
                .Options;

// Insert seed data into the database using one instance of the context
using (var context = new BloggingContext(options))
{
    context.Blogs.Add(new Blog { Url = "http://sample.com/cats" });
    context.Blogs.Add(new Blog { Url = "http://sample.com/catfish" });
    context.Blogs.Add(new Blog { Url = "http://sample.com/dogs" });

    context.SaveChanges();
}

1 个答案:

答案 0 :(得分:0)

简短回答;内存提供程序无法做到这一点。

我有同样的问题;我将procs存储在单元测试中,因此我需要模拟结果。在寻找一个库来做这件事之后,发现没有一个库可以做大三件事(FromSql,ExecuteSqlCommand和Queries),我写了自己的书:EntityFrameworkCore.DbContextBackedMock.Moq。它使用内存提供程序执行大多数操作,并为无法执行的操作提供模拟。