如何使用多个 attributes/lifecycle 方法测试 mongock 中的更改单元?

How to test change unit in mongock with its multiple attributes/lifecycle methods?

我们最近从 MongoBee 迁移到 Mongock,在 Mongock 5 版本中,@ChangeLog@ChangeSet 被删除。编写 @ChangeUnit 很容易,回滚方法非常有用。

但是,我无法弄清楚如何编写一个测试来模拟测试数据库中的迁移并验证数据库中的更改,因为有 @BeforeExecution@RollbackBeforeExecution@Execution@RollbackExecution @ChangeUnit 中的属性或生命周期方法。

以前,我曾经只是调用带有 @ChangeSet 注释的方法,例如

assertOriginalStructure();
someMigrationChangeLog.updateIndexOnSomething();
assertIndexUpdated();

现在,我不确定是否有一种干净的方法来编写上述测试,因为 @BeforeExecution@Execution 中有一些逻辑。我知道单独调用带注释的方法会起作用,但我想知道是否有办法只 运行 一个 @ChangeUnit 作为一个整体。

在新版本5中,最基本的变化是一个ChangeUnit保存了执行单元。这通常在用 @Execution 注释的方法中完成,所以第一种方法只是做你正在做的同样的事情,但调用 @Execution 方法:

assertOriginalStructure();
someMigrationChangeUnit.updateIndexOnSomething();//annotated with @Execution
assertIndexUpdated();

但是,你的ChangeUnit也可以提供@BeforeExecution,它可以用来执行任何不能在执行范围内的操作,例如,在事务性MongoDB迁移中,DDL是不允许的在事务中,因此将在 @BeforeExecution 中完成。所以如果你的 changeUnit 有 @Execution@BeforeExecution,你应该这样做:

assertOriginalStructure();
someMigrationChangeUnit.beforeExecution();//annotated with @BeforeExecution
someMigrationChangeUnit.updateIndexOnSomething();//annotated with @Execution
assertIndexUpdated();