【问题标题】:Dealing with reserved characters in DBUnit处理 DBUnit 中的保留字符
【发布时间】:2013-12-16 12:37:10
【问题描述】:

我在集成测试期间使用 DBUnit 来模拟我继承的旧 Spring/Hibernate 项目的数据。不幸的是,很久以前有人认为有一个名为 user 的用户表会很好,这是我们数据库中的保留关键字。 然后通过将实体表映射重命名为“用户”来解决这个问题,它现在已经存在了很长时间。

几年后我现在开始整合集成测试,这带来了一个问题,因为 DBUnit 不允许在它的 xml 数据集文件中使用 ` 字符(你知道它是 XML...),并且 CSV 阅读器需要名为 `user`.csv 的文件在我的操作系统下似乎失败了。

有没有办法在不使用 DBUnit 的 XML 或 CSV 阅读器的情况下添加此表,或者我应该从另一个角度解决这个问题?一种替代方法是,即在集成测试期间使用另一个映射,以便我可以将表命名为它的预期名称(用户)。但我不知道这是否可行。

我已经为此奋斗了 2 天,所以我希望得到一些外部反馈。

所以,只是为了澄清。我有一个实体,例如:

@Entity (name = "`user`")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Auditable
public class User implements UserDetails, Serializable {
  properties etc....

在我的集成测试期间,hibernate 负责通过配置 persistence.xml 文件来创建另一个表。 当 dbunit 然后尝试填充数据时,无论我如何尝试转义用户表名称,都会由于缺少表而出现错误。

【问题讨论】:

    标签: java hibernate junit integration-testing dbunit


    【解决方案1】:

    我怀疑你需要escape pattern configuration

    类似的东西

    dbunitConn.getConfig().setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN, "\"?\"");
    

    其中 dbUnitConn 是您的 dbUnit 连接,应该可以解决问题。

    【讨论】:

    • 我已经阅读了转义模式,但我不确定如何在这种情况下使用它。如果我将转义模式设置为?那么 testdata xml 中的元素应该是什么?
    • 我认为你应该能够使用保留字用户,它会识别它需要转义并应用它。如果您使用我在答案中输入的那个,它应该引用适用于许多数据库的表名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多