执行集成测试时的spring boot仅在整个过程中加载测试数据一次

时间:2015-12-30 08:08:55

标签: junit spring-boot

弹簧启动Web集成测试,首先需要加载测试数据。 现在我用下面的方式

@ActiveProfiles("test")
@Sql({"/test-schema.sql","/test-user-data.sql"})
public class FooControllerWebIntegrationTest {...}

没关系,但我发现在执行每个测试方法时,它会反复加载测试数据。见下文:

2015-12-30 15:58:18.398  INFO 4739 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executing SQL script from class path resource [test-schema.sql]
2015-12-30 15:58:18.403  INFO 4739 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executed SQL script from class path resource [test-schema.sql] in 5 ms.
2015-12-30 15:58:18.403  INFO 4739 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executing SQL script from class path resource [test-user-data.sql]
2015-12-30 15:58:18.412  INFO 4739 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executed SQL script from class path resource [test-user-data.sql] in 8 ms.

但是我想在测试整个类时只加载一次,甚至在执行mvn package时加载一次,我怎么能达到这个目的呢?

3 个答案:

答案 0 :(得分:1)

为每个测试加载架构和数据有什么问题?

如果您的问题是为每个测试重新创建了架构,那么您可以在创建数据库对象之前始终清理架构。

如果您的问题是先前测试创建的数据不再可用于其他测试,那么您的测试存在问题,因为您的测试不应取决于其他测试。每个测试都应准备测试数据,执行测试并单独验证结果。

答案 1 :(得分:0)

如果你看一下:@Sql annotation documentation

有一个Sql.ExecutionPhase,您可以在其中配置执行sql的时间。

否则你在这里回答同样的问题:

@SQL one time per class

答案 2 :(得分:0)

这听起来像LiquibaseFlyway等数据库迁移工具的工作。 Spring Boot has integration for both