【发布时间】:2020-08-31 12:24:55
【问题描述】:
我正在尝试编写一个测试来验证我的新迁移脚本(位于 src/main/resources/db/migration)是否在我的 Postgres DB 中的现有数据上正确执行。
我有 5 个迁移脚本,其中第 2 个创建包含一些列的初始 Users 表,第 5 个添加到现有的 Users 表中,并为该新列添加一个新列和默认值。
首先,我想只迁移到脚本,使Users表的初始版本,然后我会正常填充它,最后通过运行第5个脚本完成迁移,然后检查是否第 5 个脚本实际上是否更新了现有数据。但是,我不明白如何只迁移到某个版本,然后再迁移到其余版本...
这是我目前所拥有的:
实际测试
@RunWith(SpringRunner.class)
@SpringBootTest
class MigrationTest extends ComponentTest {
private static final String USER_ID = "1337";
@Autowired
private InitialUserRepository initialUserRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private Flyway flyway;
@Transactional
@Test
public void test() {
flyway.baseline(); // default 1
flyway.migrate(); // this will migrate to the final script/version where it will add the new column
// replace the above line, flyway.migrate(), with a partial migration to version 2 ONLY, something like flyway.migrate(2)
var initialUserMappingEntity = new InitialUserMappingEntity(USER_ID, "some other data");
initialUserRepository.saveAndFlush(initialUserMappingEntity);
var user = initialUserRepository.findById(USER_ID);
assertTrue(user.isPresent());
// complete the full migration here, something like flyway.migrate(5)
var updatedUser = userRepository.findById(USER_ID);
assertTrue(updatedUser.isPresent());
assertNotNull(updatedUser.get().getNewColumn());
}
}
EmptyMigrationStrategyConfig
@Configuration
public class EmptyMigrationStrategyConfig {
@Bean
public FlywayMigrationStrategy flywayMigrationStrategy() {
return flyway -> {
// do nothing
};
}
}
application-test.yaml
spring:
flyway:
locations: classpath:/db/migration
【问题讨论】: