使用MVVMCross SQLite插件构建的单元测试代码
我目前正在使用MVVMCross构建一个Xamarin.Forms项目。为了测试我的特定于平台的代码,我正在使用一个在设备上运行测试的应用程序 此测试应用程序是一个表单应用程序,但不使用MVVMCross,我没有运气将其设置为使用MVVMCross,因为应用程序类加载NUnit.Runner.app类型的应用程序,而MVVMCross需要MvxFormsApp 我想测试这个类从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
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
基本上是空的。所以我们不必在意。示例代码:
安装软件包MvvmCross.StarterPack-版本4.1.4
视图
文件夹安装程序包MvvmCross.Forms.Presenter-版本4.1.4
MainActivity
Setup
返回核心项目的App
受保护的覆盖IMvxApplication CreateApp()
{
返回新的MyApp.Core.App();
}
[活动(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);
}
}