单元测试 oracle 链接,在 Oracle SQL Developer 2.1 中对您的 PL/SQL 进行单元测试

otn_logo_small.gif

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

大约 30 分钟

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

指定要测试的对象。用户输入: 指定对象,如特定的 PL/SQL 过程和函数。

框架操作: 选择要处理的对象。

执行任何启动处理。

用户输入: 输入 PL/SQL 代码块,或输入 NULL(如果没有启动处理)。

框架操作: 执行代码块。

运行单元测试对象。

用户输入:(无。)

框架操作:执行单元测试。

用户输入:指定预期返回(结果)以及任何验证规则。

用户输入:(无。)

框架操作: 检查结果(包括任何验证的结果),保存结果。

执行任何结束处理(拆卸)。

用户输入:输入 PL/SQL 代码块,或输入 NULL(如果没有拆卸操作)。

框架操作: 执行代码块。

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

从 OTN 上安装 Oracle SQL Developer 2.1 预先试用版。按照这里的自述文件说明进行安装。

安装 Oracle Database 10g 或更高版本。

解除对 HR 用户的锁定。以 SYS 用户登录到 SQL*Plus 并执行以下命令:alter user hr identified by hr account unlock;

下载并解压缩 sqldev_unit_test.zip 文件,该文件包含您执行该教程所需要的全部文件。

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

.

打开 SQL Developer。

.

右键单击 Connections 并选择 New Connection。

conn01.gif

.

输入以下信息并单击 Test:

Connection Name:hr_orcl

Username:hr

Password:hr

选中 Save Password 复选框

Hostname:localhost

Port:1521

SID:orcl

conn02.gif

.

测试成功。单击 Connect。

conn03.gif

.

连接创建成功。在本教程中,您将通过 EMPLOYEES 表创建一个新的 EMPLOYEES2 表。在 SQL Worksheet 窗口中,输入以下 SQL 命令,然后单击 Run Statement。

create table "HR".EMPLOYEES2 as select * from "HR".EMPLOYEES;

conn04a.gif

.

表创建成功。

conn04b.gif

.

现在要创建一个过程。在 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 employees2

WHERE employee_id = emp_id;

IF commission IS NULL THEN

RAISE comm_missing;

ELSE

UPDATE employees2

SET salary = salary + sales_amt*commission

WHERE employee_id = emp_id;

END IF;

END award_bonus;

conn04c.gif

.

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

conn04d.gif

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

.

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

dbusr01.gif

.

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

Connection Name:sys_orcl

Username:sys

Password:

选中 Save Password 复选框

Role:SYSDBA

Hostname:localhost

Port:1521

SID:orcl

dbusr02.gif

.

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

dbusr03.gif

.

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

Username:unit_test_repos

Password:oracle

Default Tablespace:USERSTemporary Tablespace:TEMP

dbusr04.gif

.

选择 Connect 和 Resource 角色,然后单击 Apply。

dbusr05a.gif

dbusr05b.gif

.

unit_test_repos 用户创建成功。单击 Close。

dbusr05e.gif

.

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

dbusr07.gif

.

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

Connection Name:unit_test_repos_orcl

Username:unit_test_repos

Password:oracle

选中 Save Password 复选框

Hostname:localhost

Port:1521

SID:orcl

dbusr08.gif

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

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

.

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

crrepos01.gif

.

选择 unit_test_repos_orcl 连接,单击 OK。

crrepos02.gif

.

我们想新建一个库。单击 Yes。

crrepos03.gif

.

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

crrepos05.gif

.

以 sys 用户身份登录,单击 OK。

crrepos07.gif

.

随即显示 grant 语句。单击 Yes。

crrepos06.gif

.

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

crrepos08.gif

.

随即显示一些 grant 语句。单击 Yes。

crrepos09.gif

.

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

crrepos09b.gif

.

随即显示 grant 语句。单击 Yes。

crrepos10.gif

.

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

crrepos11.gif

.

测试库创建成功。单击 OK。

crrepos12.gif

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

.

选择 View > Unit Test。

utrep01.gif

.

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

utrep02.gif

.

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

utrep03.gif

.

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

utrep04.gif

.

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

utrep05.gif

.

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

utrep06.gif

.

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

utrep07.gif

.

单击 Next。

utrep08.gif

.

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

utrep09.gif

.

在 Specify Validations 窗口中,单击“+”图标创建一个过程验证。

utrep10.gif

.

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

utrep11.gif

.

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

SELECT * FROM employees2

WHERE employee_id = 177 and salary = 9400;

utrep12.gif

.

单击 Next。

utrep13.gif

.

在 Specify Teardown 窗口中,从下拉列表框中选择 Table or Row Copy。

utrep14.gif

.

将 Row Identifier 的值更改为 ROWID,因为您复制的表当前没有主键,然后单击 OK。

utrep15.gif

.

单击 Next。

utrep16.gif

.

单击 Finish。

utrep17.gif

.

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

utrep19.gif

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

.

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

test01.gif

.

单击 Debug Implementation

ladybug.gif 图标运行该测试。

test05.gif

.

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

test07.gif

.

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

test08.gif

.

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

test09.gif

.

在 Name 域中输入 empty_comm_pct,然后单击 OK。

test10.gif

.

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

test11.gif

.

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

test16.gif

.

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

test17.gif

.

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

test18.gif

.

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

test20.gif

.

单击 Yes 确认所作更改。

test21.gif

.

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

test22.gif

.

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

run.gif 图标。

test23.gif

.

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

test24.gif

在本教程中,您学习了如何: 创建单元测试库

创建单元测试

查看单击测试结果

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

相关文档

描述

联机帮助

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

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

divider.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值