database - 如何使用进程内迁移运行程序和内存 SQLite 数据库测试流畅的迁移
问题描述
我刚刚开始在我当前的项目中使用 FluentMigration。我写了我的第一个迁移,但我在为它编写单元测试时遇到了一些麻烦。
这是一些示例代码:
private ServiceProvider CreateServiceProvider()
{
return new ServiceCollection()
.AddLogging(lb => lb.AddFluentMigratorConsole())
.AddFluentMigratorCore()
.ConfigureRunner(
builder => builder
.AddSQLite()
.WithGlobalConnectionString("Data Source=:memory:;Version=3;New=True;")
.WithMigrationsIn(typeof(MigrationOne).Assembly))
.BuildServiceProvider();
}
private void PerformMigrateUp(IServiceScope scope)
{
var runner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();
runner.MigrateUp(1);
}
[Test]
public void ShouldHaveTablesAfterMigrateUp()
{
var provider = this.CreateServiceProvider();
using (var scope = provider.CreateScope())
{
this.PerformMigrateUp(scope);
// here I'd like to test if tables have been created in the database by the migration
}
}
我不知道如何(或者是否有可能)访问当前的数据库连接,所以我可以执行查询。任何的意见都将会有帮助。谢谢。
解决方案
好的,我找到了解决方案。我必须使用运行器处理器的 Process 方法来执行我自己的 sql 查询。
它看起来像这样:
private ServiceProvider CreateServiceProvider()
{
return new ServiceCollection()
.AddLogging(lb => lb.AddFluentMigratorConsole())
.AddFluentMigratorCore()
.ConfigureRunner(
builder => builder
.AddSQLite()
.WithGlobalConnectionString(@"Data Source=:memory:;Version=3;New=True;")
.WithMigrationsIn(typeof(MigrationDate20181026113000Zero).Assembly))
.BuildServiceProvider();
}
[Test]
public void ShouldHaveNewVersionAfterMigrateUp()
{
var serviceProvider = this.CreateServiceProvider();
var scope = serviceProvider.CreateScope();
var runner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();
runner.MigrateUp(1);
string sqlStatement = "SELECT Description FROM VersionInfo";
DataSet dataSet = runner.Processor.Read(sqlStatement, string.Empty);
Assert.That(dataSet, Is.Not.Null);
Assert.That(dataSet.Tables[0].Rows[0].ItemArray[0], Is.EqualTo("Migration1"));
}
推荐阅读
- python - 如何向熊猫数据框python添加重复时间
- hash - Snowflake 中具有 256 位的 HASH 函数
- javascript - 如何使用样式化组件覆盖 React 组件样式?
- sql-server - 如何在现有的 docker 容器中启用 SQL Server 代理
- r - 按列 ggplot2 在地图上为网格单元格着色
- java - Android ViewBinding 有时会在绑定对象处返回 null,因此在尝试访问视图时出现空指针异常
- excel - Powershell,Excel在列中查找字符串
- python - Pandas 使用 if 将值从 df 添加到新的 df
- memory-management - C/C++:减少浪费的最佳可增长缓冲区分配大小
- ios - 如何使用 AudioKit 运行自定义 DSP?