0

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

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

早些时候,我曾经只是调用带有@ChangeSet注释的方法,例如

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

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

4

1 回答 1

0

在新版本 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();
于 2022-02-17T10:48:36.327 回答