CREATE OR REPLACE PACKAGE allargs_test IS PROCEDURE noparms2 (arg1 IN VARCHAR2 := NULL,arg2 IN VARCHAR2 := NULL);
PROCEDURE noparms2 (arg1 IN VARCHAR2 := NULL,arg2 IN VARCHAR2 := NULL,arg3 IN VARCHAR2 := NULL);
关于这两个程序,Codecheck 会告诉我什么呢?让我来计算可能引起 allargs_test.noparms2 无效或歧义的方式:
allargs_test.noparms2;allargs_test.noparms2 ('abc');allargs_test.noparms2 ('abc', 'def');
Codecheck 应该识别 noparms2 的总共三种不同的无效形式。这是由于所有的跟踪缺省值允许我使用不同数量的参数来调用 noparms2.这比第一个测试方案复杂得多。当然,它可以变得更加复杂,这取决于超载程序的数量、参数的数量以及缺省值的有无。
我如何使用 utPLSQL 检查上面所示结果的种类 — 自动检查吗?测试框架提供各种各样的判断程序。例如,我可以检查两个标量值是否相等,这一点您在 betwnstr 中已经看到:
utassert.eq ('zero start', check_this, against_this);
但是,我还可以进行更有趣的判断。我可以检查结果是否为 NULL.我可以检查两个表、两个查询、两个文件、两个数据库管道或两个集合是否相等。我可以检查是否引发了特定的异常。利用最新版本 (2.0.10.2) 的 utPLSQL(感谢 Rainer Medert的贡献),我甚至可以分析 DBMS_OUTPUT 的结果,看它是否符合我的预期。
有可能使用上述判断检查来测试 Codecheck 吗?我在较早前曾提及,我在编写这种实用工具时的第一个想法是将结果显示到屏幕。(实际上,Codecheck 的一个早期原型使用了这种技术,您可以在 args_analysis.pkg 脚本中找到此原型。)那样我也许使用 utAssert.eqoutput 过程。
在对此考虑了一段时间后,我认为虽然从理论上讲这个判断程序可能有效,但我确实不赞同围绕 DBMS_OUTPUT 构建测试套件。为什么?如果我(或者其他使用并升级 Codecheck 的某个人)决定压缩输出的格式,将会怎样?我将不得不更改单元测试程序包中的代码。其底线是,通过 DBMS_OUTPUT 测试 Codecheck 的正确性使得数据(分析的结果)和表示(将结果显示在屏幕上的方式)之间的界线变得模糊不清。因为这一方法总的来说不太好,所以我要寻找其他方法。
|
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容 本站提醒:不要进行人身攻击。谢谢配合。 |