我已按照MVVMCross N + 1教程的步骤29中提供的说明,成功为我的基于MVVMcross的应用程序创建了一个单元测试项目,该教程模拟了实际用于从数据库加载数据的服务。
现在我需要使用实际数据库的副本来实现视图模型的一些集成测试。
我在测试课中所做的工作如下:
[TestFixture]
public class BaseDataServiceTests
: MvxIoCSupportingTest {
[TestFixtureSetUp]
public void ConfigureServices() {
base.ClearAll();
var sqLiteConnectionFactory = new MvxWpfSqLiteConnectionFactory();
Ioc.RegisterSingleton<ISQLiteConnectionFactory>( sqLiteConnectionFactory );
}
[Test]
public void OpenDataBase() {
//=== Arrange
var baseDataService = new BaseDataService( Ioc.Resolve<ISQLiteConnectionFactory>() );
//=== Act
var sqLiteConnection = baseDataService.SqLiteConnection;
//=== Assert
Assert.IsInstanceOf<ISQLiteConnection>(sqLiteConnection);
}
[Test]
[SetUICulture( "en-US" )]
public void GetEnglishExcelentTranslation() {
//=== Arrange
const int excelentID = 10;
var baseDataService = new BaseDataService( Ioc.Resolve<ISQLiteConnectionFactory>() );
//=== Act
var excelentString = baseDataService.GetLocalizedString( excelentID );
//=== Assert
Assert.AreEqual( "Excelent", excelentString );
}
}
如果我只是运行这些测试,它们会在baseDataService构造函数上失败,我在其中使用SqLiteConnectionFactory的Create方法打开数据库文件,但有一个例外,说明无法加载sqlite3 dll。
如果我手动将sqlite3.dll放在测试项目的bin目录中(如本网站建议的另一篇文章),则GetLocalizedString方法的测试失败,表明即使表中找不到引用的表创建并填充数据。
我觉得我在SqLitePlugin初创公司中遗漏了一些东西,但无法弄清楚如何在测试项目中正确地初始化它。
测试项目是一个标准的Windows库,通过NuGet和MVVMCross SQLite社区插件引用MVVMCross库。
非常感谢任何帮助。
提前致谢,
安东内
答案 0 :(得分:1)
sqlite3.dll的路径问题只是表明您需要从c#项目中引用该二进制文件。一种方法是使用构建操作“无”包含dll - 但是在dll上指定“始终复制到输出”。但请注意,根据目标计算机,您可能需要单独的32位和64位dll。
关于这些类型的问题的更多信息,那么可能值得提出更为一般性的“管理到原生”的问题 - 有很多人可以帮助这些问题,但是他们可能会被“推迟”/过多地混淆谈论mvvm和sqlite:)
一旦解决了这个路径问题,我就没有看到为什么sqlite插件不能正常工作的原因。我建议你尝试一下往返单元测试:
类似的东西(原谅手机打字 - 没有智能感知的记忆编码):
[TestMethod]
public void MyTest()
{
// your setup stuff
var c = factory.Create("Test.db");
c.CreateTable<Foo>();
c.Insert(new Foo(){ Bar = 1234 });
var result = c.Table<Foo>().ToList();
Assert.AreEqual(1234, result[0].Bar);
}
如果有效,那么sqlite正在运行(至少是冒烟测试版)。