我来自Java背景,而在Java中,我曾经使用嵌入式内存数据库实例编写单元测试(尽管它们更接近集成测试)。我发现测试比那些包括模拟的测试更有用,这可能会隐藏错误,而模拟过程本身就容易出错。我还使用了嵌入式代理,嵌入式NoSQL数据库等等,这些工作做得非常好。
然而,在.Net生态系统中,我很难找到并行。文档只显示the approach I do not like(和一个相当基本的)。是否有类似Mongo2Go(我正在寻找的罕见示例),但对于关系数据库?我缺少一种不同的方法吗?
答案 0 :(得分: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))
{
...
}
}
当测试需要更多关系行为时,
[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();
}
}