在 Oracle SQL Developer 3.0 中对您的 PL/SQL 进行单元测试

<不要删除此文本,因为它是在浏览器中运行时生成的“主要”标题列表的占位符>

目的

此教程介绍如何在 Oracle SQL Developer 3.0 中对您的 PL/SQL 代码进行单元测试。

所需时间

大约 30 分钟

概述

SQL Developer 单元测试框架包含针对每个测试用例的一系列有序步骤。这些步骤如下所示,包括开始执行步骤之前的用户输入以及运行测试时步骤执行的框架操作。

  1. 指定要测试的对象。
  2. 执行任何启动处理。
  3. 运行单元测试对象。
  4. 用户输入:指定预期返回(结果)以及任何验证规则。
  5. 执行任何结束处理(拆卸)。

先决条件

开始本教程之前,您应该:

创建一个颁发员工奖金的过程

在 HR 模式中,您将: 创建一个名为 AWARD_BONUS 的 PL/SQL 过程,该过程可对具有 commission_pct 的员工计算应得的奖金。AWARD_BONUS 过程的输入参数为 emp_idsales_amtemp_id 用于指定员工,sales_amt 用于奖金计算。执行以下步骤:

.

如果您已在桌面上安装了 SQL Developer 图标,则单击该图标启动 SQL Developer,之后转到第 4 步。如果您的桌面没有该图标,则执行以下步骤创建快捷方式,以便从桌面直接启动 SQL Developer 3.0。

打开 SQL Developer 3.0 所在目录,右键单击 sqldeveloper.exe(Windows 系统)或 sqldeveloper.sh(Linux 系统),然后选择 Send to > Desktop (create shortcut)

 

.

您将在桌面上找到名为 Shortcut to sqldeveloper.exe 的图标。双击该图标打开 SQL Developer 3.0。

注意:要进行重命名,则选择图标,然后按 F2,输入新名称。

 

.

您的 Oracle SQL Developer 已打开。

 

.

右键单击 Connections 并选择 New Connection

 

.

输入以下信息并单击 Test

Connection Name:HR_ORCL
Username:hr
Password:<您的口令>
选中 Save Password 复选框
Hostname:localhost
Port:1521
SID:<您的 SID>

 

.

查看左下方(Help 按钮上方)的连接状态。其状态应显示为 Success。单击 Save。然后单击 Connect

 

.

现在要创建一个过程。在 SQL Worksheet 窗口中,输入以下脚本,然后单击 Run Script。您在先决条件一节中下载 zip 文件的目录中的 award_bonus.sql 文件中也包含该代码。

create or replace
PROCEDURE award_bonus (
emp_id NUMBER, sales_amt NUMBER) AS
commission REAL;
comm_missing EXCEPTION;
BEGIN
SELECT commission_pct INTO commission
FROM employees
WHERE employee_id = emp_id;

IF commission IS NULL THEN
RAISE comm_missing;
ELSE
UPDATE employees
SET salary = salary + sales_amt*commission
WHERE employee_id = emp_id;
END IF;
END award_bonus;

 

.

您的过程已成功创建。在下一节中,您将为单元测试库创建一个数据库用户。

 

为测试库创建一个数据库用户

在本节中,您将创建一个名为 UNIT_TEST_REPOS 的数据库用户。您创建此用户是为了让其拥有单元测试库数据。

执行以下步骤:

.

为 SYS 用户创建一个连接。右键单击 Connections 并选择 New Connection

 

.

输入以下信息,然后单击 Connect

Connection Name:sys_orcl
Username:sys
Password:<您的 sys 口令>
选中 Save Password 复选框
Role:SYSDBA
Hostname:localhost
Port:1521
SID:<您的 SID>

 

.

连接创建成功。展开 sys_orcl 连接,右键单击 Other Users 并选择 Create User

 

.

输入以下信息,然后选择 Roles 选项卡。

Username:unit_test_repos
Password:<您的口令>
Default Tablespace:USERS
Temporary Tablespace:TEMP

 

.

选择 ConnectResource 角色,然后单击 Apply

 

.

unit_test_repos 用户创建成功。单击 Close

 

.

现在您需要为 unit_test_repos 用户创建一个连接。此用户将拥有单元测试库数据。右键单击 Connections 并选择 New Connection

 

.

输入以下信息,然后单击 Connect

Connection Name:unit_test_repos_orcl
Username:unit_test_repos
Password:<您的口令>
选中 Save Password 复选框
Hostname:localhost
Port:1521
SID:<您的 SID>

unit_test_repos 用户和 unit_test_repos_orcl 连接创建成功。

 

创建单元测试库

为了创建一个单元测试,您需要创建一个单元测试库。您将在刚创建的用户模式中创建该库。执行以下步骤:

.

选择 Tools > Unit Test > Repository,然后选择 Select Current Repository

 

.

选择 unit_test_repos_orcl 连接,单击 OK

 

.

您要新建一个库。单击 Yes

 

.

该连接没有创建测试库所需的权限。单击 OK 显示将应用的权限。

 

.

sys 用户身份登录,单击 OK

 

.

随即显示 grant 语句。单击 Yes

 

.

UNIT_TEST_REPOS 用户需要拥有对某些所需表的 select 访问权限。单击 OK

 

.

随即显示 grant 语句。单击 Yes

 

.

UNIT_TEST_REPOS 用户当前无权管理测试库的所有者。单击 OK 查看将执行的 grant 语句。

 

.

随即显示 grant 语句。单击 Yes

 

.

在创建该库时显示一个进度窗口。

 

.

测试库创建成功。单击 OK

 

创建单元测试

至此已创建了单元测试库,需要对在该教程前面创建的 PL/SQL 过程创建一个单元测试。执行以下步骤:

.

选择 View > Unit Test

 

.

在 Unit Test 导航器中,右键单击 Tests 并选择 Create Test

 

.

在 Select Operation 中,选择您创建 AWARD_BONUS 过程时所使用的 HR_ORCL 连接。

 

.

展开 Procedures,选择 AWARD_BONUS,然后单击 Next

 

.

在 Specify Test Name 窗口中,确保 Test Name 指定为 AWARD_BONUS 并且选中了 Create with single Dummy implementation,然后单击 Next

 

.

在 Specify Startup 窗口中,单击 并从下拉列表框中选择 Table or Row Copy

 

.

在 Source Table 中输入 EMPLOYEES,然后单击 OK。注意,受到该测试影响的表将保存到一个临时表中,并且会自动生成对该表的查询。

 

.

单击 Next

 

.

在 Specify Parameters 窗口中,将 EMP_ID 和 SALES_AMT 的 Input 字符串分别改为 1775000,然后单击 Next

 

.

在 Specify Validations 窗口中,选择 创建一个过程验证。

 

.

从下拉列表中选择 Query returning row(s)

 

.

指定以下查询,然后单击 OK。该查询将测试此单元测试所执行的更改的结果。

SELECT * FROM employees
  WHERE employee_id = 177 and salary = 9400;

 

.

单击 Next

 

.

在 Specify Teardown 窗口中,单击 并从下拉列表框中选择 Table or Row Restore

 

.

将 Row Identifier 保留为 Primary Key,然后单击 OK

 

.

单击 Next

 

.

单击 Finish

 

.

展开 Tests。您的测试出现在列表中。

 

运行单元测试

接下来,您将运行该单元测试以查看各值是否生效。执行以下步骤:

.

在左侧导航器中选择 AWARD_BONUS 测试。您会看到在右侧面板中显示该测试的详细信息。

 

.

单击 Debug Implementation 运行该测试。

 

.

随即显示结果。您会看到该测试运行成功。单击 Close

 

.

在导航器中展开 AWARD_BONUS 查看详细节点。

 

.

此时您想对员工没有提成百分比的情况进行测试,看看这种情况下会出现什么结果。您可以创建这个测试的另一个实现,然后更改测试参数。右键单击 AWARD_BONUS 并选择 Add Implementation

 

.

在 Test Implementation Name 中输入 empty_comm_pct,然后单击 OK

 

.

在左侧导航器中选择 empty_comm_pct,显示此实现的测试详细信息。

 

.

将 EMP_ID 和 SALES_AMT 的 Input 参数分别更改为 1015000。再次单击 Debug Implementation

 

.

单击 Yes,在运行测试前保存您的更改。

 

.

注意此时出现了一个错误。该错误指示由于此员工没有 commission_pct 而引发了一个异常。您想在测试中指定该异常。单击 Close

 

.

对 Expected Result 选择 Exception,在其旁边的域中输入 6510。这意味着,如果该异常的错误代码为 6510,则不显示错误信息。单击 Debug Implementation

 

.

单击 Yes 确认所作更改。

 

.

您可以看到该测试这一次成功执行了,因为异常已得到处理。单击 Close

 

.

此时,您想运行该测试并保存结果。单击运行

 

.

该测试连同其两个实现的结果一并保存下来。

 

总结

在本教程中,您学习了如何:

资源

要了解有关 Oracle SQL Developer 的更多信息,可以查看以下资料:

相关文档

说明

联机帮助

要访问此帮助,在 Oracle SQL Developer 中选择 Help 菜单。搜索感兴趣的主题。

OTN 上的 Oracle SQL Developer 通过此页面可访问 Oracle SQL Developer 的所有相关信息,包括文档、下载、教程等。

硬件和软件,集成设计、卓越性能 关于 Oracle |Oracle 和 Sun | Oracle RSS 信源 | 招聘 | 联系我们 | 网站地图 | 法律声明 | 使用条款 | 您的隐私权利