【问题标题】:Is it possible to create an In-memory database using SQLite.Net-PCL?是否可以使用 SQLite.Net-PCL 创建内存数据库?
【发布时间】:2023-03-22 01:45:02
【问题描述】:

目前我正在使用 SQLite.Net-PCL 3.1.1 对 Xamarin MvvmCross 应用程序进行单元测试。单元测试项目是一个普通的.NET项目。

所以现在我在嘲笑MvxSqliteConnectionFactoryBase

public class MockMvxSqliteConnectionFactoryBase :  MvxSqliteConnectionFactoryBase
{
    #region implemented abstract members of MvxSqliteConnectionFactoryBase

    public override string GetPlattformDatabasePath(string databaseName)
    {
        return "Data Source=:memory:";
    }

    public override ISQLitePlatform GetCurrentPlatform()
    {
        return new SQLite.Net.Platform.Generic.SQLitePlatformGeneric(); 
    }
    public override ISQLitePlatform GetCurrentPlatform(string key)
    {
        return new  SQLite.Net.Platform.Generic.SQLitePlatformGeneric();
    }

    #endregion
}

但是数据库不是在内存中创建的,而是在项目的bin文件夹中创建的。

我尝试像这样example 初始化SQLiteConnection,但没有一个只接受一个字符串的构造函数。

【问题讨论】:

  • @Aron 实际上,它可以在有或没有后备文件的情况下工作。仅将其用作内存是一种非常常见的情况。这就是这个问题的意义所在。
  • 这是一个完全有效的问题。任何反对者都应该给出有效的解释
  • @Aron 那么你看错了页面。使用 SQLite 作为纯内存数据库是一种常见的场景
  • @stuartd 我的立场是正确的。

标签: c# sqlite unit-testing mvvmcross sqlite-net


【解决方案1】:

按照@CL 的提示。给我我改了GetPlattformDatabasePath方法:

public override string GetPlattformDatabasePath(string databaseName)
    {
        return ":memory:";
    }

现在我在 bin 文件夹中没有看到要创建的内容,并且不需要在每次单元测试运行后删除现有数据,因此数据库必须在内存中。

【讨论】:

  • 行得通。但是您知道如何使用多个内存数据库,以便并行运行测试而不会互相影响吗?
猜你喜欢
  • 1970-01-01
  • 2011-07-06
  • 2010-10-29
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多