让我们来看一个很简单的示例,从而大致了解单元测试程序包的内容。假设我已经创建了一个关于 SUBSTR 的封装,答应在开始和结束点之间请求一个子串(一个简单的函数)(列表 1)。 即使是简单的或看似不重要的程序(如 betwnStr)也需要测试 — 而实际上我必须考虑大量的测试方案(包括 NULL 开始值、NULL 结束值以及开始大于结束等)。列表 2 显示了测试程序包的一部分(全部测试包的内容请参见 ut_betwnstr.pkb)。关于要害部分的解释,请参见表 1. 也许您会想,“多么单调乏味!我真的必须编写所有那些代码,只是为了测试这个简单的函数吗?”实际上,那些在测试领域工作的人都知道,测试一个应用程序所需要编写的代码数量经常比应用程序本身更多。对于这个特定的程序包和测试代码的 utPLSQL 风格,您在某些情况下会生成全部的测试代码。实际上,ut_betwnstr 程序包通过对 utGen.testpkg_from_string 过程的调用而生成,如列表 3 所示。 即使您不生成测试程序包,也经常可以找到其他方法,利用最少的代码运行许多基于 utPLSQL 的测试 — 这正是我用 Codecheck 所做的工作。 将 utPLSQL 应用于 Codecheck 要利用 utPLSQL,我需要构建一个单元测试程序包并调用 utAssert 程序,以确定我的代码是否通过其测试。但是,在进行这些操作之前,我需要精心制作我的测试方案。请记住:测试方案第一,其次才是代码。 现在应该寻找灵感,暂停前进,考虑一下我所提供的实用工具。我希望它能够验证什么?那些能编译但包含歧义超载的程序包的特例是什么?我能检测到什么情况?有效超载的示例是什么?究竟我需要测试正面和负面的因素。经过一段时间以后,我给出以下的内容: 有效的超载 两个超载程序带有不同数量的非缺省参数。 两个超载程序带有相同数量的非缺省参数,并在数据类型方面具有足够的差别(如 NUMBER 对 DATE)。 函数和过程具有相同名称和参数列表,包括不带参数的情况。区分这两者并没有问题,因为它们在代码中的使用方法不同。 无效的超载 两个超载程序具有不同数量的非缺省参数,导致歧义的参数列表。 两个程序具有单个参数,数据类型相同但参数名不同。 两个程序具有相同的名称,具有单个参数,但却是同系列中不同的数据类型。新闻热点
疑难解答