在.Net Core

时间:2017-03-21 22:09:52

标签: c# .net unit-testing .net-core

我来自Java背景,而在Java中,我曾经使用嵌入式内存数据库实例编写单元测试(尽管它们更接近集成测试)。我发现测试比那些包括模拟的测试更有用,这可能会隐藏错误,而模拟过程本身就容易出错。我还使用了嵌入式代理,嵌入式NoSQL数据库等等,这些工作做得非常好。

然而,在.Net生态系统中,我很难找到并行。文档只显示the approach I do not like(和一个相当基本的)。是否有类似Mongo2Go(我正在寻找的罕见示例),但对于关系数据库?我缺少一种不同的方法吗?

1 个答案:

答案 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))
    {
        ...
    }
}
当测试需要更多关系行为时,

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();
    }
}