【问题标题】:Unit Testing DDL with SQL Developer 3.1使用 SQL Developer 3.1 对 DDL 进行单元测试
【发布时间】:2012-03-22 17:58:40
【问题描述】:

SQL Developer 支持 DML 的单元测试,但我还没有找到为 DDL 创建单元测试的方法。什么是解决这个问题的好方法?我开始使用的架构很小,不到十几个表,还有即将到来的大型项目。 Google 对 DDL 的单元测试应用并没有太多回报。关于测试 DDL 或其他用于单元测试 DDL 的工具的方法有什么想法吗?

【问题讨论】:

    标签: oracle unit-testing oracle-sqldeveloper


    【解决方案1】:

    您想对 DDL 进行哪些测试?表是按定义创建的,或者不是。

    您可以做的是编写一系列测试来查询数据字典以确保表存在,列具有您想要的大小和数据类型等。然而,这更像是一个模式验证脚本而不是单元测试,我不确定它会有多大价值。

    如果您维护一个架构构建脚本(或一系列迁移以添加新对象以将对象添加到您的架构),那么如果它应用且没有错误,您就知道架构已按照定义创建。

    然后,如果您有存储过程,如果架构不是 100% 正确,其中一些将无法编译。干净地获取过程将是架构的另一个验证步骤。

    最后,您为测试 DML 和存储过程而编写的单元测试将验证正确的数据是否进入了正确的表中。

    您可能需要一些测试来确保表只能接受某些值或列可以是唯一的等(即测试约束是否正确),但这也将取决于标准单元测试。

    我非常相信为 DB 代码编写单元测试,但我不喜欢 SQL Developers GUI 的做法。现在我正在为应用程序编写测试,但我正在用 Ruby 编写测试代码,而且它似乎运行良好。它也将很容易地内置到我们的构建和自动化测试过程中。

    另一种替代方法是我以前使用过的 UT_PLSQL,但仅仅由于 PLSQL 的性质,测试变得非常冗长,这就是我决定在我当前的项目中使用 Ruby 的原因。

    【讨论】:

    • 例如,外键和约束可能涉及很多逻辑,可能应该进行单元测试,你不觉得吗?
    【解决方案2】:

    我知道这是一个较老的问题,但我最近一直在努力解决同样的问题。我认为在创建对象之前为 DDL 定义测试然后创建这些对象以通过这些测试是很有用的。

    我已经使用断言“模式”完成了其中的一些操作——即 tdd.ddlunit.assert_tableexists(p_schema_name, p_table_name) 如果表不存在,它会引发异常,并在它存在时静默运行。

    我创建的其他断言用于确保所有 varchar2 列都使用字符语义而不是字节长度语义,并确保所有表和列都被注释。

    这些会签入代码存储库,并且可以通过持续集成框架运行,以确保我们拥有符合预期的有效数据库。

    【讨论】:

      猜你喜欢
      • 2019-03-12
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      相关资源
      最近更新 更多