2017-03-17 78 views
0

我上有一个约300多代码库Spring集成测试,这是从这个类避免重新运行的迁移

@RunWith(SpringRunner.class) 
@DirtiesContext(classMode=DirtiesContext.ClassMode.BEFORE_CLASS) //enable migration if IT ran before 
@ActiveProfiles(Constants.SpringProfiles.TEST) 
@SpringBootTest 
@Transactional 
public abstract class BaseTest extends BaseMockitoTest { .... } 

这个配置会发生什么继承工作是ofcourse它重新初始化完整的Spring应用程序,这在我们的整体集成套件中花费了很多时间。我想了解是否可以将此配置更改为避免重新初始化的上下文。

我已经尝试删除@DirtiesContext,但没有帮助。

我想要的是,初始化期间运行的spring初始化和迁移应该保持原样,剩余的东西应该在测试执行时回滚。

回答

2

镒,@DirtiesContext是懒惰:P - 它会抓住你,当初始化时间和/或测试用例的量增加。

我们的数据库迁移是我们构建链中的一个独立步骤(包括迁移生产数据)。

在我们运行测试用例之前,我们使用当前模式设置数据库 - 这也是链中的一个单独步骤。所以我们的集成测试假定模式是正确的。如果模式的创建失败,我们不会运行测试,因为报告无论如何都不会有意义。

我喜欢这种方式,因为我们可以分别管理和分析集成测试和迁移测试,这意味着:即使迁移失败,集成测试也可以运行。他们可以平行运行,所以你应该早一点得到反馈。

编辑:除了Paul的声明:我们的一些集成测试在单独的事务中执行任务,并且我们无法断言这些执行的结果: -/