早上好!
我是 utPLSQL 新手,我认为这是一个很棒的工具。
这是我的测试脚本:
CREATE OR REPLACE TYPE "Test"."TyTest" AS OBJECT
(
"Test" CHAR(4)
);
/
CREATE OR REPLACE TYPE "Test"."TtTest"
AS TABLE OF "Test"."TyTest";
/
CREATE OR REPLACE FUNCTION "Test"."TfTest"
RETURN "Test"."TtTest"
AS "ResultSet" "Test"."TtTest";
BEGIN
SELECT "Test"."TyTest"
(
'Test'
)
BULK COLLECT INTO
"ResultSet"
FROM
"SYS"."DUAL";
RETURN "ResultSet";
END "TfTest";
/
SELECT
"t"."r"."Test" AS "Test"
FROM
(
SELECT
VALUE("o") "r"
FROM
TABLE
(
"Test"."TfTest"()
) "o"
) "t";
/
GRANT EXECUTE ON "Test"."TfTest" TO "UTPLSQL";
/
CREATE OR REPLACE PACKAGE "UTPLSQL".testtftest IS
--%suite(testtftest)
--%suitepath(alltests)
--%test(Test)
PROCEDURE tftest1;
END testtftest;
/
CREATE OR REPLACE PACKAGE BODY "UTPLSQL".testtftest IS
--
-- test tftest case 1: ...
--
PROCEDURE tftest1 IS
"Actual" SYS_REFCURSOR;
"Expected" SYS_REFCURSOR;
BEGIN
-- arrange
-- act
OPEN "Actual" FOR
SELECT
'Test' AS "Test"
FROM
"SYS"."DUAL";
-- tftest.tftest;
OPEN "Expected" FOR
SELECT
"t"."r"."Test" AS "Test"
FROM
(
SELECT
VALUE("o") "r"
FROM
TABLE
(
"Test"."TfTest"()
) "o"
) "t";
-- assert
"UT"."EXPECT"("Actual")."TO_EQUAL"("Expected");
END tftest1;
END testtftest;
/
如果我运行测试,它工作正常:
但是,如果我使用被测模式运行代码覆盖率:UTPLSQL、TEST 并包含对象:Test.TfTest、UTPLSQL.TESTTFTEST、UTPLSQL.UT、UTPLSQL.UT_EXPECTATION、UTPLSQL.UT_EXPECTATION_COMPOUND,如下所示:
结果完全是空的:
我的第一个问题是我做错了什么?我的错误在哪里?
然后我运行下一个文本:
CREATE OR REPLACE PACKAGE "UTPLSQL"."TestTfTest" IS
--%suite("TestTfTest")
--%suitepath(alltests)
--%test(Test)
PROCEDURE "TfTest1";
END "TestTfTest";
/
CREATE OR REPLACE PACKAGE BODY "UTPLSQL"."TestTfTest" IS
--
-- test tftest case 1: ...
--
PROCEDURE "TfTest1" IS
"Actual" SYS_REFCURSOR;
"Expected" SYS_REFCURSOR;
BEGIN
-- arrange
-- act
OPEN "Actual" FOR
SELECT
'Test'
FROM
"SYS"."DUAL";
-- tftest.tftest;
OPEN "Expected" FOR
SELECT
"t"."r"."Test" AS "Test"
FROM
(
SELECT
VALUE("o") "r"
FROM
TABLE
(
"Test"."TfTest"()
) "o"
) "t";
-- assert
"UT"."EXPECT"("Actual")."TO_EQUAL"("Expected");
END "TfTest1";
END "TestTfTest";
/
如果我再次运行测试,那么我会得到 0/0 测试的错误结果(我想是双引号错误),这就是图像:
如果我运行代码覆盖率,我会得到相同的空结果。
我的第二个问题是,是否可以更改 utPLSQL 生成的模板,使 ORACLE 保留字大写,使用模式表示法和双引号作为名称限定(如 SQL 标准),并使用 Camell 大小写,而不是在对象命名中使用蛇形大小写?
我希望我的例子和问题能够说清楚。
我尝试在不同的地方使用双引号,但即使我测试了标量函数但相同的代码覆盖率报告为空,它仍然工作错误。