首页 > Linux操作系统 > Linux操作系统 > utPLSQL用户指南一
utPLSQL单元测试框架由几个不同的元素组成:
用户指南描述了如何使用这些utPLSQL包。
utPLSQL包提供了以下功能:
utPLSQL既可以运行测试包中的所有单元测试,也可以运行测试套件中定义的多个测试包中的测试。在运行测试之前,必须构建测试包。
使用utPLSQL.test过程运行单个包的测试:
PROCEDURE utPLSQL.test ( package_in IN VARCHAR2, samepackage_in IN BOOLEAN := FALSE, prefix_in IN VARCHAR2 := NULL, recompile_in IN BOOLEAN := TRUE, dir_in IN VARCHAR2 := NULL, suite_in in VARCHAR2 := NULL, owner_in IN VARCHAR2 := NULL, reset_results_in IN BOOLEAN := TRUE , from_suite_in IN BOOLEAN := FALSE, subprogram_in IN VARCHAR2 := '%', per_method_setup_in IN BOOLEAN := FALSE );
参数定义如下表。
| package_in | 被测试的包或者独立程序的名称。 |
| samepackage_in | 如果单元测试程序与被测试代码位于相同的包中,设置为TRUE。默认为测试程序位于单独的包中。 |
| prefix_in | 前缀,与package_in组成测试包的名称。如果没有指定值,使用最后一次指定的值或者默认值。 |
| recompile_in | 如果不需要在运行测试之前自动重编译测试包,设置为FALSE。 |
| dir_in | 包含测试包源代码的目录。如果不指定值(默认情况),并且没有关闭自动重编译,将会在utConfig.setdir指定的目录中查找测试包源代码。如果没有指定目录,使用最后一次指定的目录。 |
| suite_in | 包含测试包的测试套件名称。可选,用于更新测试的统计信息。 |
| owner_in | 定义测试套件以及添加测试包时指定的模式名称。可选,用于更新测试的统计信息。 |
| reset_results_in | 设置为FALSE时不清除结果信息,此时仍然可以调用utResult.show查看结果。否则每次测试之后将会清除结构数据。 |
| from_suite_in | 设置为TRUE时说明该测试从测试套件中运行,仅供内部使用。 |
| subprogram_in | 字符串,用于限制需要运行测试的程序。默认的%代表运行所有的测试。 |
| per_method_setup_in | 设置为TRUE时在运行每个单元测试程序前后都分别执行设置程序和清除程序。默认情况只在包测试开始和结束时运行一次设置程序和清除程序。 |
| override_package_in | 覆盖包名称的自动判断,从而删除测试包与被测试包之间的一一对应关系。默认为NULL。考虑使用utPLSQLrun过程替代该参数。 |
以下是一些示例。
1. 运行betwnstr函数的单元测试(由于使用了默认的前缀,执行ut_betwnstr测试包)。不重新编译测试包。
SQL> exec utPLSQL.test ('betwnstr', recompile_in => FALSE)2. 运行包te_employee的全部单元测试,测试包位于/tmp目录中,名称为“test_te_employee”。执行测试之前重新编译测试包。
SQL> exec utPLSQL.test ('te_employee', prefix_in =>
'test_', dir_in => '/tmp')3. 运行包corporate_polluters的全部单元测试,测试包与被测试代码位于相同的包中。
SQL> exec utPLSQL.test ('te_employee', samepackage_in => TRUE)每次运行utPLSQL.test之后将会显示结果。如果测试成功,输出如下所示:
SUCCESS: "betwnstr"
如果测试失败,输入如下所示:
FAILURE: "betwnstr" BETWNSTR: IS NULL: NULL start BETWNSTR: End larger than string length; expected "cdeg", got "cdefg"
以上描述的测试程序常用方法假设每个被测试的包,例如mypackage,拥有一个对应的测试包,名称为被测试包名加上一个前缀:ut_mypackage。除了该方法之外,还可以使用run过程。该过程直接运行测试包,不需要满足其他条件。唯一的条件是满足一个有效测试包的命名约定。
PROCEDURE run (
testpackage_in IN VARCHAR2,
prefix_in IN VARCHAR2 := NULL,
suite_in IN VARCHAR2 := NULL,
owner_in IN VARCHAR2 := NULL,
reset_results_in IN BOOLEAN := TRUE,
from_suite_in IN BOOLEAN := FALSE,
subprogram_in IN VARCHAR2 := '%',
per_method_setup_id IN BOOLEAN := FALSE);
参数定义如下表。
| test_package_in | 测试包的名称。 |
| prefix_in | 前缀,与package_in组成测试包的名称。如果没有指定值,使用NULL作为默认值。即使用第一个参数指定的包名。 |
| suite_in | 包含测试包的测试套件名称。可选,用于更新测试的统计信息。 |
| owner_in | 定义测试套件以及添加测试包时指定的模式名称。可选,用于更新测试的统计信息。 |
| reset_results_in | 设置为FALSE时不清除结果信息,此时仍然可以调用utResult.show查看结果。否则每次测试之后将会清除结构数据。 |
| from_suite_in | 设置为TRUE时说明该测试从测试套件中运行,仅供内部使用。 |
| subprogram_in | 字符串,用于限制需要运行测试的程序。默认的%代表运行所有的测试。 |
| per_method_setup_in | 设置为TRUE时在运行每个单元测试程序前后都分别执行设置程序和清除程序。默认情况只在包测试开始和结束时运行一次设置程序和清除程序。 |
除了运行单个测试包的测试之外,可以设置包含一个或多个测试包的测试套件。然后可以调用utPLSQL.testsuite运行整个测试套件。
PROCEDURE utPLSQL.testsuite ( suite_in IN VARCHAR2, recompile_in IN BOOLEAN := TRUE, reset_results_in IN BOOLEAN := TRUE per_method_setup_in in BOOLEAN := FALSE );
其中suite_in为测试套件的名称,recompile_in决定了自动编译的方式。
以下是运行PL/Vision库全部测试的示例:
SQL> exec utplsql.testsuite ('plvision');utPLSQL.testSuit的参数列表比utPLSQL.test少很多,可以在套件内部定义这些特性,存储在utPLSQL的表中。
在运行整个测试套件之前。必须定义测试套件。
与测试单个包的run过程类似,runsuite过程用于运行测试套件。该过程不假设测试包名称与被测试程序之间存在任何关联。
PROCEDURE utPLSQL.runsuite ( suite_in IN VARCHAR2, reset_results_in IN BOOLEAN := TRUE per_method_setup_in in BOOLEAN := FALSE );
参数的使用方法参见testsuite。
如果定义了测试套件,以及测试包,utPLSQL将会在每次测试之后更新以下统计信息:
以上信息自动执行统计。然后可以使用表ut_package与表ut_suite编写查询与报告。
运行函数utPLSQL.version返回当前安装的版本。
FUNCTION utPLSQL.version RETURN VARCHAR2
以下程序没有参数:
PROCEDURE trc; PROCEDURE notrc; FUNCTION tracing RETURN BOOLEAN;
程序trc与notrc分别用于打开与关闭跟踪功能。函数tracing在跟踪打开时返回TRUE,关闭时返回FALSE。这个功能对于编写框架代码自身很有用。以下是一个跟踪输出的示例:
Initialized utPLSQL session... Setpkg to Lottery Package and program = ut_Lottery Same package? N Is package? Y Prefix = ut_ Recompiling ut_Lottery in Runprog of ut_SETUP Package and program = ut_Lottery.ut_SETUP Same package? N Is package? Y Prefix = ut_ Addtest Package and program = Lottery.UT_DRAW Same package? N Override? Y Prefix = ut_ Runprog of UT_DRAW Package and program = ut_Lottery.UT_DRAW Same package? N Is package? Y Prefix = ut_ . > FFFFFFF AA III L U U RRRRR EEEEEEE > F A A I L U U R R E > F A A I L U U R R E > F A A I L U U R R E > FFFF A A I L U U RRRRRR EEEE > F AAAAAAAA I L U U R R E > F A A I L U U R R E > F A A I L U U R R E > F A A III LLLLLLL UUU R R EEEEEEE . FAILURE: "Lottery" . > Individual Test Case Results: > FAILURE - EQ "Test of DRAW" Expected "01 02 05 27 43 49" and
got "02 04 27 28 31 33" > > > Errors recorded in utPLSQL Error Log: > > NONE FOUND Runprog of ut_TEARDOWN Package and program = ut_Lottery.ut_TEARDOWN Same package? N Is package? Y Prefix = ut_ PL/SQL procedure successfully completed.
从1.4.1版起,不再需要显式注册单元测试。utPLSQL默认会从数据字典(ALL_ARGUMENTS视图)中提取所有单元测试程序的名称,然后运行测试。utPLSQL通过指定前缀查找这些程序。
如果想要显示注册单元测试,需要打开手动注册功能:
SQL> exec utConfig.registertest (TRUE)
该设置立即存储在当前模式的配置中。以下命名关闭手动注册功能:
SQL> exec utConfig.registertest (FALSE)
在设置程序中手动注册单元测试。这些单元测试的信息不进行永久保存,除非在测试套件中定义单元测试。
使用utPLSQL.addtest过程注册单元测试。
PROCEDURE utPLSQL.addtest (
NAME_IN IN VARCHAR2,
utprefix_in IN VARCHAR2,
iterations_in IN PLS_INTEGER := 1
);
PROCEDURE utPLSQL.addtest (
package_in IN VARCHAR2,
NAME_IN IN VARCHAR2,
utprefix_in IN VARCHAR2,
iterations_in IN PLS_INTEGER := 1
);
其中,name_in是单元测试程序的名称,包括前缀;utprefix_in当前未使用;iterations_in是该测试运行的次数,当前未使用;package_in是包含该单元测试程序的包名。如果指定了包名,将会覆盖utPLSQL.test中指定的包名,只对该测试有效。
以下是一个设置了一系列用于employee表查询封装的测试的设置程序。
CREATE OR REPLACE PACKAGE BODY ut_te_employee
IS
PROCEDURE ut_setup
IS
BEGIN
utplsql.addtest ('UT_EMP_DEPT_LOOKUPROWCOUNT');
utplsql.addtest ('UT_EMP_JOB_LOOKUPROWCOUNT');
utplsql.addtest ('UT_EMP_MGR_LOOKUPROWCOUNT');
utplsql.addtest ('UT_HIRE_DATE$VAL');
utplsql.addtest ('UT_I_EMPLOYEE_NAME$ROW');
utplsql.addtest ('UT_I_EMPLOYEE_NAME$VAL');
utplsql.addtest ('UT_ONEROW');
utplsql.addtest ('UT_PKYROWCOUNT');
utplsql.addtest ('UT_ROWCOUNT');
utplsql.addtest ('UT_SALARY$VAL');
END;下一个,utConfig包
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24945919/viewspace-743239/ ,如需转载,请注明出处,否则将追究法律责任。