Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MVVMCross SQLite插件构建的单元测试代码_Sqlite_Xamarin_Xamarin.forms_Mvvmcross - Fatal编程技术网

使用MVVMCross SQLite插件构建的单元测试代码

使用MVVMCross SQLite插件构建的单元测试代码,sqlite,xamarin,xamarin.forms,mvvmcross,Sqlite,Xamarin,Xamarin.forms,Mvvmcross,我目前正在使用MVVMCross构建一个Xamarin.Forms项目。为了测试我的特定于平台的代码,我正在使用一个在设备上运行测试的应用程序 此测试应用程序是一个表单应用程序,但不使用MVVMCross,我没有运气将其设置为使用MVVMCross,因为应用程序类加载NUnit.Runner.app类型的应用程序,而MVVMCross需要MvxFormsApp 我想测试这个类从SQLite数据库保存和加载用户数据: public class DataStorageService : IDataS

我目前正在使用MVVMCross构建一个Xamarin.Forms项目。为了测试我的特定于平台的代码,我正在使用一个在设备上运行测试的应用程序

此测试应用程序是一个表单应用程序,但不使用MVVMCross,我没有运气将其设置为使用MVVMCross,因为应用程序类加载NUnit.Runner.app类型的应用程序,而MVVMCross需要MvxFormsApp

我想测试这个类从SQLite数据库保存和加载用户数据:

public class DataStorageService : IDataStorageService
{
    private readonly SQLiteConnection _connection;

    public User UserData
    {
      get { return _connection.Table<User>().FirstOrDefault(); }
      set { _connection.InsertOrReplace(value); }
    }

    public DataStorageService(IMvxSqliteConnectionFactory factory)
    {
      _connection = factory.GetConnection(DataStorageConstants.LocalDatabaseName);
      _connection.CreateTable<User>();
    }
  }
公共类数据存储服务:IDataStorageService
{
专用只读SQLiteConnection\u连接;
公共用户用户数据
{
获取{return}connection.Table().FirstOrDefault();}
设置{u connection.InsertOrReplace(value);}
}
公共数据存储服务(IMvxSqliteConnectionFactory)
{
_connection=factory.GetConnection(DataStorageConstants.LocalDatabaseName);
_connection.CreateTable();
}
}
我想实际测试它是否从本地SQLite数据库保存和加载,所以我不想模拟IMvxSqliteConnectionFactory。我尝试将MVVMCross和SQLite插件安装到项目中,然后传入连接工厂的Android实现,但这一再引发typeloadexception

关于如何使用MVVMCross(或是否有替代方案?)和依赖注入设置此测试,有什么想法吗?

有可能:)重要的事情发生在
MVXSplashCreenactivity
中。
MvxFormsApp
基本上是空的。所以我们不必在意。示例代码:

  • 创建nunit测试应用程序项目
  • 安装软件包MvvmCross.StarterPack-版本4.1.4
  • 摆脱
    视图
    文件夹
  • 安装SQLite插件
  • 参考你的核心项目
  • 安装程序包MvvmCross.Forms.Presenter-版本4.1.4
  • MainActivity
  • Adust
    Setup
    返回核心项目的
    App
  • 受保护的覆盖IMvxApplication CreateApp()
    {
    返回新的MyApp.Core.App();
    }
    
  • 将SplashScreen更改为()
  • [活动(MainLauncher=true
    ,Theme=“@style/Theme.Splash”
    ,NoHistory=true
    ,ScreenOrientation=ScreenOrientation.纵向)]
    公共级喷溅屏
    :mvxsplashscreenacity
    {
    公共屏幕()
    :base(资源、布局、屏幕)
    {
    }
    私人楼宇初始化完成;
    公共覆盖无效初始化完成()
    {
    如果(!\u初始化完成)
    {
    _isInitializationComplete=true;
    启动性(类型(主要活动));
    }
    }
    受保护的重写void OnCreate(Android.OS.Bundle)
    {
    Forms.Init(这个,bundle);
    Forms.ViewInitialized+=(对象发送者,ViewInitializedEventArgs e)=>
    {
    如果(!string.IsNullOrWhiteSpace(e.View.StyleId))
    {
    e、 NativeView.ContentDescription=e.View.StyleId;
    }
    };
    base.OnCreate(bundle);
    }
    }
    
  • 写一个像这样的测试
  • [TestFixture]
    公共类TestClass
    {
    [测试]
    公共void TestMethod()
    {
    var service=Mvx.Resolve();
    Assert.IsNull(service.UserData);
    }
    }
    
  • 享受MvvmCross的非凡魅力