【问题标题】:Using MYSQL DB, unit testing with HSQLDB = Problems使用 MYSQL DB,使用 HSQLDB 进行单元测试 = 问题
【发布时间】:2011-04-01 20:41:46
【问题描述】:

我最近使用关键字 RLIKE 修改了一个 MYSQL 查询,但是当我运行使用 HSQLDB 来模拟数据库的单元测试时,它会抛出一个未知的 SQL 令牌异常。

为了解决这个问题,目前我已经注释掉了这些测试,但想找到一个解决方法,以便我可以实际测试我的代码。

由于 HSQLDB 文档似乎缺乏,我的 google-fu 未能找到解决方案,我们将不胜感激。

【问题讨论】:

    标签: mysql unit-testing hsqldb incompatibility


    【解决方案1】:

    HSQLDB 2.0 中的等价物是函数

    REGEXP_MATCHES ( , )

    而且用法是

    SELECT ... WHERE REGEXP_MATCHES(mystring, regexpr)

    最新的 Hibernate 3.5.5 支持 HSLQDB 2.0

    【讨论】:

      【解决方案2】:

      RLIKE 是非标准运算符,HSQL 不支持。如果您想继续使用 HSQL 进行测试,则必须使用 LIKE 语句或其他一些标准方法重写您的查询。或者,您可以使用例如模拟数据库交互dbunit.

      【讨论】:

        【解决方案3】:

        我认为这个故事的寓意是:使用与您打算部署的相同的软件堆栈运行您的测试。

        如果您在不同的环境中进行测试,您的测试可能会通过,但您的应用在生产环境中会失败 - 这很糟糕。

        【讨论】:

        • 我认为这取决于。在暂存构建概念时,有时您的测试设置必须不同于生产环境(例如,速度原因,或者没有外部产品集成沙箱)。艺术是在方便的测试设置和测试“正确的东西”之间找到一个很好的折衷。
        • 这不是客户第一次决定要更改数据库。我尽量远离查询中的非标准功能。
        • 客户没有“决定要更改数据库”。数据库的选择是应用程序设计者负责的事情,并且不能由客户更改,除非有很好的理由给他们带来重大的相关成本。如果应用程序由多个客户使用,则一个客户可能根本无法要求更改数据库。数据库应用程序完全依赖于它们被测试的供应商,没有理智的人愿意支持一对 >1 的供应商。
        • 我同意@jackrabbit。常见:组合数据库模式,因为许可证无处不在。不可知论是最好的策略,我们对应用程序设计的看法都不同,有很多标准化的功能可以走很长的路。
        猜你喜欢
        • 2011-07-17
        • 2020-10-23
        • 1970-01-01
        • 2012-03-03
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2020-07-28
        相关资源
        最近更新 更多