我正在使用spring框架编写一些集成测试。对于不同的集成测试类,我有不同的SQL脚本。如下所示:
@ContextConfiguration(classes = ...)
@Sql("classpath:sportCenter-test.sql")
public class SportCenterResourceIT {
...
}
除了在每个测试之前执行SQL脚本,而不是每个类执行一次之外,一切都运行得很好。我已经搜索了一段时间的spring文档,但我无法找到与此选项相关的内容。
有人能给我个提示吗?
发布于 2016-07-18 23:53:43
在类级别添加org.springframework.transaction.annotation.Transactional
注释将防止来自@Sql
脚本的任何更改在测试之间持久化。所以你的代码变成了:
@ContextConfiguration(classes = ...)
@Sql("classpath:sportCenter-test.sql")
@Transactional
public class SportCenterResourceIT {
...
}
这种组合将导致以下结果:
@Sql
脚本将在每次测试之前运行结束时恢复
发布于 2018-11-14 16:56:32
我使用这种方法来解决这个问题:
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@Sql("classpath:sql/DataForRouteTesting.sql")
public class MyTest {}
每次都会执行脚本,但没有冲突的主键。
发布于 2020-04-29 15:31:58
如果我们想在每个类中执行一次sql脚本,我们可以在setup方法中执行脚本,并在为一个方法执行脚本时将flag设置为true,这样它就不会再次执行。`@自动上线的私有DataSource数据库;
私有静态布尔dataLoaded = false;
@Before
public void setup() throws SQLException {
if(!dataLoaded) {
try (Connection con = database.getConnection()) {
ScriptUtils.executeSqlScript(con, new ClassPathResource("path_to_script.sql"));
dataLoaded = true;
}
}
}`
https://stackoverflow.com/questions/29153100
复制相似问题