ABP加多数据库单元测试配置

一、数据源注入

在最基础的模块中AiTestModule(继承AbpModule)需要注入额外的数据库类
有初始化函数PreInitialize()或者Initialize(),在容器IocManager中需要注入主库和额外库,其他地方亦可以使用此逻辑。

var services = new ServiceCollection();
IdentityRegistrar.Register(services);
services.AddEntityFrameworkInMemoryDatabase();
var serviceProvider = WindsorRegistrationHelper.CreateServiceProvider(iocManager.IocContainer, services);
//注入主数据库
var builder = new DbContextOptionsBuilder<AiDbContext>();
builder.UseInMemoryDatabase(Guid.NewGuid().ToString()).UseInternalServiceProvider(serviceProvider);
iocManager.IocContainer.Register(Castle.MicroKernel.Registration.Component
        .For<DbContextOptions<AiDbContext>>()
        .Instance(builder.Options)
        .LifestyleSingleton());
//注入额外数据库
var builder1 = new DbContextOptionsBuilder<ChemicalDbContext>();
builder1.UseInMemoryDatabase(Guid.NewGuid().ToString()).UseInternalServiceProvider(serviceProvider);
iocManager.IocContainer.Register(Castle.MicroKernel.Registration.Component
        .For<DbContextOptions<ChemicalDbContext>>()
        .Instance(builder1.Options)
        .LifestyleSingleton());

二、数据源数据加入

在继承AiTestModule类的AiTestBase的构造函数中仿写

protected AiTestBase(){
    UsingChemicalDbContext(AbpSession.TenantId, context =>
    {
        new TestChemicalDbDataBuilder(context).Create();
    });
}
protected void UsingChemicalDbContext(int? tenantId, Action<ChemicalDbContext> action)
{
    using (UsingTenantId(tenantId))
    {
    	//此处是重点,获取容器内的实例数据库
        using (var context = LocalIocManager.Resolve<ChemicalDbContext>())
        {
            action(context);
            context.SaveChanges();
        }
    }
}

在上方的using内的TestChemicalDbDataBuilder获取的数据库句柄中加入指定数据即可

    class TestChemicalDbDataBuilder
    {
        private ChemicalDbContext _context;

        public TestChemicalDbDataBuilder(ChemicalDbContext chemicalDbContext)
        {
            this._context = chemicalDbContext;
        }

        internal void Create()
        {
            //准备构建化学库数据
            new MrvChemicalDataBuilder(_context).Create();
            _context.SaveChanges();
        }
    }

注意点:

单元测试在调用仓储时,不可使用GetAll()这类非即时数据获取函数,会触发仓储已关闭错误。
暂时测试发现可用的。

FirstOrDefault(it => true)

GetAllList(it => true);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将ABP2数据库的数据复制到ABP2_HIS数据库中,可以使用以下步骤: 1. 创建ABP2_HIS数据库,并在其中创建与ABP2数据库相同的表结构。 2. 使用SQL语句将ABP2数据库中的数据导出为一个SQL脚本。 3. 修改该SQL脚本中的数据库名称为ABP2_HIS,并保存该脚本。 4. 在ABP2_HIS数据库中运行该SQL脚本,将ABP2数据库中的数据复制到ABP2_HIS数据库中。 下面是具体的步骤: 1. 创建ABP2_HIS数据库,并在其中创建与ABP2数据库相同的表结构。 可以使用以下SQL语句创建ABP2_HIS数据库: ``` CREATE DATABASE ABP2_HIS; ``` 在ABP2_HIS数据库中创建与ABP2数据库相同的表结构,可以使用以下命令: ``` mysqldump -u root -p ABP2 > ABP2.sql ``` 2. 使用SQL语句将ABP2数据库中的数据导出为一个SQL脚本。 在命令行窗口中输入以下命令: ``` mysqldump -u root -p ABP2 > ABP2.sql ``` 该命令将ABP2数据库中的数据导出为一个名为ABP2.sql的SQL脚本。 3. 修改该SQL脚本中的数据库名称为ABP2_HIS,并保存该脚本。 打开ABP2.sql文件,并用文本编辑器将其中所有的“ABP2”替换为“ABP2_HIS”。 4. 在ABP2_HIS数据库中运行该SQL脚本,将ABP2数据库中的数据复制到ABP2_HIS数据库中。 在命令行窗口中输入以下命令: ``` mysql -u root -p ABP2_HIS < ABP2.sql ``` 该命令将ABP2.sql文件中的SQL语句在ABP2_HIS数据库中执行,从而将ABP2数据库中的数据复制到ABP2_HIS数据库中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值