utPLSQL 测试和双引号代码覆盖率失败

问题描述 投票:0回答:1

早上好!

我是 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;
/

如果我运行测试,它工作正常:

测试OK。

但是,如果我使用被测模式运行代码覆盖率: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 大小写,而不是在对象命名中使用蛇形大小写?

我希望我的例子和问题能够说清楚。

我尝试在不同的地方使用双引号,但即使我测试了标量函数但相同的代码覆盖率报告为空,它仍然工作错误。

oracle unit-testing oracle-sqldeveloper code-coverage utplsql
1个回答
0
投票

我直接在 utPLSQL 团队上发布了问题,这就像一个错误。

他们的回应:

utPLSQL 响应

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.