0
点赞
收藏
分享

微信扫一扫

The Four Step Program to Using utPLSQL


使用 utPLSQL 的四步程序

步骤 1.安装超宽带。

步骤2.选择要测试的程序并确定测试用例。

第3步.生成测试包。

步骤 4.运行测试。

有关要使用的架构的说明

步骤 1.安装(和升级)无线硬盘。

注意:如果您已经安装了以前版本的utPLSQL,您将使用这些相同的步骤来执行安装。在安装之前,安装过程不会删除任何对象,如表。如果您希望安装 utPLSQL 的新副本,并且不希望在现有安装的基础上进行升级,请按照以下步骤删除 utPLSQL。

通过 SQL*+ 连接到将拥有 utPLSQL 组件的会话。如果尚未定义架构,则必须创建它。utPLSQL 架构必须具有以下权限:

  • 创建会话。
  • 创建表、视图、包和序列。

如果您愿意,您可以将utPLSQL安装到系统架构中,这将避免创建新用户的需要。但是,您可能更愿意将所有内容保存在单独的位置。下面是比尔·普里比尔提交的一个示例脚本,它创建了一个用户“UTP”,该用户具有足够的权限来安装utPLSQL。显然,这只是一个示例,需要针对您的环境进行更改:



连接系统/管理器创建由utp默认表空间用户临时表空间临时标识的用户utp;授予创建会话,创建表,创建过程,创建序列,创建视图,创建公共同义词,删除公共同义词到utp;更改用户utp配额对用户无限制;



注意如果所讨论的架构无法创建和删除公共同义词或对DBMS_PIPE执行权限,则在安装时可能会收到错误消息。但是,utPLSQL 仍将正常运行。

连接到架构后,运行参数为“安装”的ut_i_do.sql文件以安装所有 utPLSQL 对象。您应确保 SQL*Plus 会话的工作目录是保存 utPLSQL 文件的目录,然后按如下方式发出此问题:



SQL> @ut_i_do安装



此文件将创建所需的所有表、包和其他对象。请注意,安装脚本使用 SPOOL 命令动态创建一些文件。因此,您必须在目录中具有写入权限。

要检查 utPLSQL 的安装,请检查ut_i_install.log文件。

删除

要卸载产品,请再次运行ut_i_do.sql脚本,但使用参数“uninstall”,如下所示:



> @ut_i_do 卸载



步骤2.选择要测试的程序并确定测试用例。

您可能希望测试单个独立过程或函数,或者一个包中的一组程序。选择程序,然后提出要测试的不同案例集。此数据将确定您为程序运行的测试类型和数量。

例如,假设我创建了一个名为 betwnStr 的独立函数(一种基于起始位置和结束位置返回子字符串的 SUBSTR 变体),该函数存储在 betwnstr.sf (1) 中:



创建或替换函数 betwnStr ( string_in 在 VARCHAR2 中,start_in在整数中, end_in在整数中) 返回 VARCHAR2 是开始返回 ( 子STR ( 子STR ( string_in, start_in, end_in - start_in + 1 ) );结束;



为了测试这个函数,我需要传入各种输入,如下表所示:

开始

结束

结果

不为空

不为空

3(正数)

1(较小的正数)

3(正数)

100(大于字符串长度)

字符串的余数从 3

所以现在我知道我想测试什么,以及我想如何测试它。

第3步.生成测试包。

utPLSQL 提供了一种简单、自动化的方法来运行您的测试。但是,要自动工作,您必须遵循一些规则,以便utPLSQL可以找到并执行您的测试代码。规则如下:

测试代码必须放在测试中。

测试包规范应存储在名为 ut_<程序>.pks)的文件中,正文必须存储在名为 ut_<程序>.pkb 的文件中(通过遵循此命名约定,可以将 utPLSQL 设置为在每次测试之前自动重新编译测试包)。

测试包必须包含一个名为 ut_setup 的安装过程和一个名为 ut_teardown 的拆卸过程,这两个过程都不采用任何参数。

对于要在此包中测试的每个程序,测试包应具有单独的过程。

现在,您应该知道utPLSQL中有许多花里胡哨的功能,允许您更改utPLSQL包的许多默认值(例如用于设置,拆卸和测试过程的前缀)和行为。但是,当您“入门”时,我们将完全依赖默认值,并尽快启动并进行测试。

因此,如果我要测试独立程序,则保存在 ut_betwnstr.pks(1) 中的测试包规范 betwnstr 将如下所示:



创建或替换包ut_betwnstr IS 过程ut_setup;程序ut_teardown;程序ut_betwnstr;结束ut_betwnstr;/



现在让我们构建保存在 ut_betwnstr.pkb(1) 中的包体。在这个非常简单的情况下,我不必设置任何数据结构,因此我不必拆除任何东西。我的拆解过程可以是空的(但它必须存在)。所以我有:



创建或替换包正文 ut_betwnstr IS 过程 ut_setup 开始 NULL;结束;过程ut_teardown开始为空;结束;



是时候构建单元测试过程了。为此,我需要返回到我的测试用例网格,并将这些数据输入和结果集转换为对 utAssert 包中程序的调用。

utAssert提供了许多“断言例程”,用于测试您传递给它们的值或表达式,然后将结果记录在utPLSQL中。您可以使用 utAssert 测试两个字符串、文件、表或集合之间的相等性。您可以进行测试以查看表达式的计算结果是否为 NULL。我可以将这两种类型的断言(相等和IS NULL)用于我的测试用例,我在下面重复:

开始

结束

结果

不为空

不为空

3(正数)

1(较小的正数)

3(正数)

100(大于字符串长度)

字符串的余数

以下是它的工作原理:对于每个测试用例,我提供案例的字符串描述,然后提供我要计算的表达式。让我们从“典型的有效用法”开始。我传递一个字符串“abcdefg”,起始位置为 3,结束位置为 5,并且应返回“cde”。我在我的单元测试程序中表达了如下:


程序ut_betwnstr是开始的(“典型有效用法”,betWNSTR(STRING_IN=>“abcdefg”,START_IN=>3,END_IN=>5),“cde”);



请注意,我之所以调用 utAssert.eq,是因为我想将贝特恩斯特返回的值与字符串“cde”进行比较。它们应该是相等的。

现在,我可以为每个案例再写一个 utAssert 程序调用。在下一个示例中,我调用 utAssert.isnull,因为我期望贝特恩斯特返回一个 NULL 值。



(“空开始”,STRING_IN =>“>”,START_IN =空,END_IN => 5));(“空端”,贝特温斯特(STRING_IN=>“>”START_IN=>2,END_IN=>空));(“结束小于起点”,贝特温斯特(STRING_IN=>“abcdefg”,START_IN=>5,END_IN=>2));utAssert.eq ( “结束大于字符串长度”, betWNSTR( STRING_IN = > “abcdefg”, START_IN = > 3, END_IN = > 200 ), “cdefg” );结束ut_BETWNSTR;结束ut_betwnstr;/



我现在已经为贝特恩斯特函数创建了我的单元测试程序。我将编译这两个文件,以确保没有编译错误:



SQL> @ut_betwnstr.pks 包已创建。已创建程序包> @ut_betwnstr.pkb 程序包正文。



注意:当您运行测试时,utPLSQL将默认尝试重新编译测试包,以确保将最新的更改合并到测试中。仍然值得进行初始编译,以确保您正确构建了测试。您还需要确保安装并配置UTL_FILE,以便 utPLSQL 可以读取和编译测试包文件。

因此,在测试包就位并进行编译后,现在让我们看看如何运行测试。

步骤 4.运行测试。

你已经构建了你的代码,你已经构建了你的测试包,你已经编译了那个测试包。现在是时候运行测试了。启动 SQL*Plus 并连接到拥有要测试的代码的架构。

然后通过调用 utPLSQL 测试在 utPLSQL 测试框架中运行测试包:



SQL> exec utplsql.test ('betwnstr', recompile_in => FALSE)



调用 utplsql.test 中的第二个参数“recompile_in = > FALSE”告诉 utPLSQL 您已经编译了测试包。您还可以让 utPLSQL 在每次运行测试时自动重新编译测试包。

如果测试未发现任何错误(这意味着断言程序未检测到任何冲突),您将看到以下输出:


SQL> exec utplsql.test ('betwnstr', recompile_in => FALSE) Success: “betwnstr”



如果测试检测到故障,您将看到以下行的输出:



SQL>执行 utplsql.test (“betwnstr”, recompile_in = > 错误) 失败: “betwnstr” BETWNSTR: IS 为空: 空开始 betwnstr: 结束大于字符串长度;预期的“夯毛”,得到“桔梗”



如您所见,utPLSQL会告诉您失败的测试用例的描述,并尽可能多地向您展示导致失败的原因。

您现在已经成功安装了utPLSQL,编写了一个测试包并运行了您的测试!

自动重新编译测试包

默认情况下,utPLSQL将尝试重新编译您的测试包代码(必须将其放在两个文件中<包规范的名称>.pks和包体的<名称>.pkb)。这当然假定文件与数据库位于同一台计算机上。如果不是这种情况,您可以通过调用 utConfig.autocompile 来关闭此功能,如下所示:



autocompile(false);



如果您确实希望使用此功能,utPLSQL 需要 Oracle 提供的UTL_FILE包来读取源代码文件,然后编译在这些文件中找到的代码。在使用UTL_FILE之前,必须将其配置为在 PL/SQL 中使用。一旦您确认UTL_FILE在数据库实例中工作,您必须通过调用 utPLSQL.setdir 来告诉 utPLSQL 测试包所在的位置。如果不这样做,则utPLSQL将无法在每次运行之前重新编译测试包,而是将显示一条错误消息。

调用 utConfig.setdir 程序来告诉 utPLSQL 源代码的位置。假设我存储了所有代码在 e:\utplsql\testall 中。然后我会在 SQL*Plus 中进行此调用:



SQL> exec utplsql.setdir ('e:\utplsql\testall')



有关要使用的架构的说明

在上面的步骤 1 中,我们描述了哪个用户应该拥有构成 utPLSQL 框架的对象。但是,对于哪个架构应包含测试包以及运行测试时要连接哪个架构,经常存在混淆。有很多方法可以做到这一点,但最简单的方法如下:

  • 哪个架构拥有utPLSQL本身并不重要,只要其他用户有权访问它。
  • 测试包应与正在测试的代码采用相同的架构。
  • 在运行测试时,您应该以拥有测试包(以及测试代码)的用户身份进行连接

从这里到哪里去

如果您继续执行所有四个步骤,那么您现在应该已经成功地使用utPLSQL来测试一个非常简单的函数(betwnstr)或您自己的功能。这无疑会让你对使用utPLSQL来处理更复杂的代码和复杂的测试要求感到非常兴奋。

要了解有关 utPLSQL 中可用的不同特性和功能的更多信息,请访问用户指南。

若要通读有关如何在 utPLSQL 中生成测试包的更全面介绍,请访问如何生成测试包。

若要查看有关生成测试用例和不同类型的测试包的大量示例,请访问示例文档。

脚注

1. 此文件位于 utPLSQL 发行版的示例目录中。

 

参考至:http://utplsql.sourceforge.net/

如有错误,欢迎指正


举报

相关推荐

0 条评论