无法使用 Sqlite 在 Xunit 上初始化数据库

问题描述 投票:0回答:1

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

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

如果您愿意,为了清楚起见,我将保留我的 GitHub 存储库。

https://github.com/pedrohfk/MovieListAPI

c# .net sqlite asp.net-core
1个回答
0
投票

对于 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 的行为与其他数据库系统不同时,可能会出现问题。

© www.soinside.com 2019 - 2024. All rights reserved.