首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >@SQL每个类一次

@SQL每个类一次
EN

Stack Overflow用户
提问于 2015-03-20 03:13:06
回答 5查看 5.6K关注 0票数 9

我正在使用spring框架编写一些集成测试。对于不同的集成测试类,我有不同的SQL脚本。如下所示:

代码语言:javascript
复制
@ContextConfiguration(classes = ...)
@Sql("classpath:sportCenter-test.sql")
public class SportCenterResourceIT {
    ...
}

除了在每个测试之前执行SQL脚本,而不是每个类执行一次之外,一切都运行得很好。我已经搜索了一段时间的spring文档,但我无法找到与此选项相关的内容。

有人能给我个提示吗?

EN

回答 5

Stack Overflow用户

发布于 2016-07-18 23:53:43

在类级别添加org.springframework.transaction.annotation.Transactional注释将防止来自@Sql脚本的任何更改在测试之间持久化。所以你的代码变成了:

代码语言:javascript
复制
@ContextConfiguration(classes = ...)
@Sql("classpath:sportCenter-test.sql")
@Transactional
public class SportCenterResourceIT {
    ...
}

这种组合将导致以下结果:

  1. 您的@Sql脚本将在每次测试之前运行
  2. 测试本身将运行
  3. 步骤1或2所做的任何数据库更改都将在每次测试

结束时恢复

票数 6
EN

Stack Overflow用户

发布于 2018-11-14 16:56:32

我使用这种方法来解决这个问题:

代码语言:javascript
复制
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@Sql("classpath:sql/DataForRouteTesting.sql")
public class MyTest {}

每次都会执行脚本,但没有冲突的主键。

票数 6
EN

Stack Overflow用户

发布于 2020-04-29 15:31:58

如果我们想在每个类中执行一次sql脚本,我们可以在setup方法中执行脚本,并在为一个方法执行脚本时将flag设置为true,这样它就不会再次执行。`@自动上线的私有DataSource数据库;

私有静态布尔dataLoaded = false;

代码语言:javascript
复制
@Before
public void setup() throws SQLException {
    if(!dataLoaded) {
        try (Connection con = database.getConnection()) {
            ScriptUtils.executeSqlScript(con, new ClassPathResource("path_to_script.sql"));
            dataLoaded = true;
        }
    }
}`
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29153100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档