【问题标题】:failed to init database on Xunit with Sqlite无法使用 Sqlite 在 Xunit 上初始化数据库
【发布时间】:2021-12-19 06:26:20
【问题描述】:

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

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

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

https://github.com/pedrohfk/MovieListAPI

【问题讨论】:

    标签: c# .net api sqlite asp.net-core


    【解决方案1】:

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

    查看Microsoft documentation on testing with sql lite here

    基本上,您需要为您的测试传递一个新连接到 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 的行为与其他数据库系统不同时,就会出现问题。

    【讨论】:

      猜你喜欢
      • 2017-05-11
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 2012-12-15
      • 2023-04-08
      • 2019-08-08
      相关资源
      最近更新 更多