utPLSQL测试与代码覆盖率异常及命名规范定制咨询
utPLSQL新手常见问题解答
问题1:测试脚本执行正常,但代码覆盖率结果为空
- 对象名称匹配错误:Oracle对未加双引号的对象名会自动转为大写,若被测试对象(如
Test.TfTest)是大小写敏感的(创建时用了双引号),覆盖率配置必须严格匹配大小写并带双引号,例如"Test"."TfTest";若未用双引号,需确保配置中使用大写名称(如TEST.TFTEST)。 - 未指定正确的对象类型:代码覆盖率针对的是包体、函数、过程等可执行对象,若配置的是包规范而非包体,会导致无数据。需确认覆盖对象是
Test.TfTest的包体(若为包)或函数/过程本身。 - 测试未触发被测试代码:即使测试脚本执行成功,若测试用例未调用到被测试对象的核心逻辑(比如空测试、仅调用无关代码),覆盖率也会为空。可添加断言验证被测试函数/过程的返回值,确认代码路径被执行。
- 权限不足:执行测试的用户需要读取被测试对象源代码的权限(如
SELECT ALL_SOURCE或SELECT DBA_SOURCE),否则无法收集覆盖率数据。
问题2:为测试包及过程加双引号后,测试结果显示0/0
- 严格匹配带双引号的对象名称:若被测试对象或测试包使用了双引号(如
"MyTestPackage"),所有引用必须完全匹配,包括模式名。例如在测试包的注解中指定被测试对象:--%test procedure test_my_proc is begin ut.expect("MySchema"."MyTestPackage".my_proc()).to_be_true(); end; - 避免不必要的双引号:除非必须使用大小写敏感的名称,否则尽量不给测试包、过程加双引号,Oracle默认的大写无引号命名更易被utPLSQL识别。
- 检查测试套件注册逻辑:若手动注册测试套件,需确保注册时的名称与实际测试包的双引号名称完全一致:
begin ut_suite_manager.add_suite('"MySchema"."MyTestPackage"'); end; /
问题3:能否修改utPLSQL生成的模板,使其遵循指定SQL标准
可以自定义utPLSQL的生成模板,实现你需要的风格:
- 自定义模板文件:复制utPLSQL默认模板(通常在安装目录的
templates文件夹下),修改内容:- 将
CREATE、PACKAGE等Oracle保留字改为大写; - 将对象引用改为
"&schema.."."&package_name"格式(模式+双引号限定); - 将蛇形命名的变量(如
test_package_name)替换为驼峰命名(如TestPackageName)。
- 将
- 设置默认模板:通过更新
ut_configuration表,将自定义模板设为默认,后续生成测试包时自动使用:update ut_configuration set value = '/path/to/your/custom_template.tpl' where name = 'default_template'; commit; - 保留内置占位符:修改模板时需保留utPLSQL的内置占位符(如
&suite_name.、&test_procedures.),否则生成的测试包无法正常工作。
内容的提问来源于stack exchange,提问作者Jamesit0
相关产品推荐
相关产品推荐

