使用SQL Developer 3.1对DDL进行单元测试

时间:2012-03-22 17:58:40

标签: oracle unit-testing oracle-sqldeveloper

SQL Developer支持DML的单元测试,但我没有找到为DDL创建单元测试的方法。这个问题的好方法是什么?我开始使用的模式很小,不到十几个表,其中包含更大的项目。谷歌对DDL的单元测试应用的回报并不多。有关测试DDL的方法或单元测试DDL存在的其他工具的任何想法吗?

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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

另一个替代方案是我之前使用过的UT_PLSQL,但是由于PLSQL的性质使得测试非常冗长,这就是为什么我决定将Ruby用于我当前的项目。

答案 1 :(得分:0)

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

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

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

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