![]() |
||
此教程介绍如何在 Oracle SQL Developer 2.1 中对您的 PL/SQL 进行单元测试。
大约 30 分钟
SQL Developer 单元测试框架包含针对每个测试用例的一系列有序步骤。这些步骤如下所示,包括开始执行步骤之前的用户输入以及运行测试时步骤执行的框架操作。
开始本教程之前,您应该:
在 HR 模式中,您将基于 EMPLOYEES 表创建一个名为 EMPLOYEES2 的表。然后,您将创建一个名为 AWARD_BONUS 的过程,该过程可对具有 commission_pct 的员工计算应得的奖金。AWARD_BONUS 过程的输入参数为 emp_id 和 sales_amt。emp_id 用于指定员工,sales_amt 用于奖金计算。执行以下步骤:
|
. |
打开 SQL Developer。
|
|---|---|
|
. |
右键单击 Connections 并选择 New Connection。
|
|
. |
输入以下信息并单击 Test: Connection Name:hr_orcl
|
|
. |
测试成功。单击 Connect。
|
|
. |
连接创建成功。在本教程中,您将通过 EMPLOYEES 表创建一个新的 EMPLOYEES2 表。在 SQL Worksheet 窗口中,输入以下 SQL 命令,然后单击 Run Statement。 create table "HR".EMPLOYEES2 as select * from "HR".EMPLOYEES;
|
|
. |
表创建成功。
|
|
. |
现在要创建一个过程。在 SQL Worksheet 窗口中,输入以下脚本,然后单击 Run Script。您在前题条件一节中将 zip 文件下载到的目录中的 award_bonus.sql 文件中也包含该代码。 create or replace
|
|
. |
您的过程已创建成功。在下一节中,您将为单元测试库创建一个数据库用户。
|
在本节中,您将创建一个名为 UNIT_TEST_REPOS 的数据库用户。您创建此用户是为了让其拥有单元测试库数据。执行以下步骤:
|
. |
为 SYS 用户创建一个连接。右键单击 Connections 并选择 New Connection。
|
|---|---|
|
. |
输入以下信息,然后单击 Connect。 Connection Name:sys_orcl
|
|
. |
连接创建成功。展开 sys_orcl 连接,右键单击 Other Users 并选择 Create User。
|
|
. |
输入以下信息,然后选择 Roles 选项卡。 Username:unit_test_repos
|
|
. |
选择 Connect 和 Resource 角色,然后单击 Apply。
|
|
. |
unit_test_repos 用户创建成功。单击 Close。
|
|
. |
现在您想为 unit_test_repos 用户创建一个连接。此用户将拥有单元测试库数据。右键单击 Connections 并选择 New Connection。
|
|
. |
输入以下信息,然后单击 Connect。 Connection Name:unit_test_repos_orcl
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 域中输入 EMPLOYEES2,然后单击 OK。注意,受到该测试影响的表将保存到一个临时表中,并且会自动生成对该表的查询。
|
| . |
单击 Next。
|
| . |
在 Specify Parameters 窗口中,将 EMP_ID 和 SALES_AMT 的 Input 字符串分别改为 177 和 5000,然后单击 Next。
|
| . |
在 Specify Validations 窗口中,单击“+”图标创建一个过程验证。
|
| . |
从下拉列表中选择 Query returning row(s)。
|
| . |
指定以下查询,然后单击 OK。该查询将测试此单元测试所执行的更改的结果。 SELECT * FROM employees2 WHERE employee_id = 177 and salary = 9400;
|
| . |
单击 Next。
|
| . |
在 Specify Teardown 窗口中,从下拉列表框中选择 Table or Row Copy。
|
| . |
将 Row Identifier 的值更改为 ROWID,因为您复制的表当前没有主键,然后单击 OK。
|
| . |
单击 Next。
|
| . |
单击 Finish。
|
| . |
展开 Tests。您的测试出现在列表中。
|
接下来,您将运行该单元测试以查看各值是否生效。执行以下步骤:
| . | 在左侧导航器中选择 AWARD_BONUS 测试。您会看到在右侧面板中显示该测试的详细信息。
|
|---|---|
| . |
单击 Debug Implementation
|
| . |
随即显示结果。您会看到该测试运行成功。单击 Cancel。
|
| . |
在导航器中展开 AWARD_BONUS 查看详细节点。
|
| . |
此时您想对员工没有提成百分比的情况进行测试,看看这种情况下会出现什么结果。您可以创建这个测试的另一个实现,然后更改测试参数。右键单击 AWARD_BONUS 并选择 Add Implementation。
|
| . |
在 Name 域中输入 empty_comm_pct,然后单击 OK。
|
| . |
在左侧导航器中选择 empty_comm_pct,显示此实现的测试详细信息。
|
| . |
将 EMP_ID 和 SALES_AMT 的 Input 参数分别更改为 101 和 5000。再次单击 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 | |