2017-03-21 39 views
1

我来自Java背景,在Java中我使用嵌入式内存数据库实例编写单元测试(尽管它们更接近集成测试)。我发现比那些包含嘲笑的测试更有用的测试,这可能会隐藏错误,嘲讽过程本身就是错误的。我还使用了诸如嵌入式中间件,嵌入式NoSQL数据库等等,这些工作非常好。.Net Core中的嵌入式数据库测试

但是,在.Net生态系统中,我正在努力寻找一个平行线。该文档只显示the approach I do not like(和一个相当基本的)。有没有像Mongo2Go(我正在寻找的罕见例子),但对于关系数据库?我错过了不同的方法吗?

回答

2

以下是测试实体框架的两个选项。

InMemory database专为不需要严格关系数据库行为的测试而设计。

[TestMethod] 
public void Foo_DoesBar_WhenBaz() 
{ 
    var options = new DbContextOptionsBuilder<BloggingContext>() 
     .UseInMemoryDatabase(databaseName: "foo_bar_baz") 
     .Options; 

    using (var context = new BloggingContext(options)) 
    { 
     ... 
    } 
} 

SQLite in-memory mode当测试需要更多的关系行为时是合适的。

[TestMethod] 
public void Foo_DoesBar_WhenBaz() 
{ 
    var connection = new SqliteConnection("DataSource=:memory:"); 
    connection.Open(); 

    try 
    { 
     var options = new DbContextOptionsBuilder<BloggingContext>() 
      .UseSqlite(connection) 
      .Options; 

     using (var context = new BloggingContext(options)) 
     { 
      ...   
     } 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 
+0

谢谢,看起来它现在会做:-) –