首页 > 解决方案 > 无法使用 Sqlite 在 Xunit 上初始化数据库

问题描述

我在我的主项目中创建了一个初始化程序,其中生成了数据库并加载了信息。

现在我想做同样的过程,但是对于我的测试项目,我的问题是如何为测试创建一个初始化程序?

如果你愿意,为了清楚起见,我会留下我的 github 存储库。

https://github.com/pedrohfk/MovieListAPI

标签: c#.netapisqliteasp.net-core

解决方案


对于 EF-Core,您可以使用内存或 SQL-Lite 来实现您的测试。

在此处查看有关使用 sql lite 进行测试的 Microsoft 文档

基本上,您需要为您的测试传递一个新连接到 DBContext:

public class SqliteInMemoryItemsControllerTest : ItemsControllerTest, IDisposable
{
    private readonly DbConnection _connection;

    public SqliteInMemoryItemsControllerTest()
        : base(
            new DbContextOptionsBuilder<ItemsContext>()
                .UseSqlite(CreateInMemoryDatabase())
                .Options)
    {
        _connection = RelationalOptionsExtension.Extract(ContextOptions).Connection;
    }

    private static DbConnection CreateInMemoryDatabase()
    {
        var connection = new SqliteConnection("Filename=:memory:");

        connection.Open();

        return connection;
    }

    public void Dispose() => _connection.Dispose();
}

请注意以下警告:

使用 SQLite 是测试 EF Core 应用程序的有效方法。但是,当 SQLite 的行为与其他数据库系统不同时,就会出现问题。


推荐阅读