我刚开始使用utplsql,所以很抱歉我可能不理解任何明显的东西。我的问题是,我刚刚创建了一个测试套件…
CREATE OR REPLACE PACKAGE BODY ut_test_pkg
IS
LP_business_date DATE;
PROCEDURE ut_setup
IS
BEGIN
select nvl(business_date,trunc(sysdate))
into LP_business_date
from my_ut_test_params;
END ut_setup;
PROCEDURE ut_teardown
IS
BEGIN
NULL;
END ut_teardown;
PROCEDURE ut_ttable(I_business_part_date IN DATE)
IS
L_dummy NUMBER:=0;
BEGIN
select count(*)
into L_dummy
from mytable
where business_part_date=to_date('11/05/2013','dd/mm/yyyy')
and length(trim(cust_order_no))>0;
utassert.eq (
'Successful CUST_ORDER_NO NOT EMPTY',
L_dummy,
0
);
dbms_output.put_line('L_dummy ' || L_dummy);
END ut_ttable;
END ut_mytest_pkg;
/
现在我用utplsql定义测试…
BEGIN
utsuite.add ('MY TEST SUITE');
-- Add two packages for testing
utpackage.add ('MY TEST SUITE', 'ut_test_pkg');
END;
/
现在我运行测试套件…
set serveroutput on
begin
utplsql.testSuite('MY TEST SUITE',recompile_in=>false);
end;
/
当我查询UT_SUITE表时,它告诉我执行次数增加了,最后的状态是SUCCESS,但是我不认为它正在运行我的测试过程it_table,因为我故意添加了失败的条件。
我还输入了一些打印语句,但它没有打印到缓冲区。
有谁知道我可能做错了什么吗?哦,最后一件事,utr错误也没有告诉我它失败了。
呢?
问题是,如果您有一个包Manage_cars
,那么与该包相关的所有测试代码必须在包ut_Manage_cars
中。utplsql需要你所有的测试包有ut_
前缀(如果你真的真的想要,你可以改变这个前缀…无论如何,您仍然需要为每个包含测试过程的包提供一个前缀。
所以在这种情况下,当您想要将包添加到测试套件中时,您可以这样做:
utPackage.add('my_suite','Manage_cars');
注意,当您向套件添加包时,您添加的包包含需要测试的代码。不是包含断言和其他utplsql相关代码的代码(必须放在ut_Manage_cars
中)
希望这对你有帮助,如果没有回复,我会尽快回复:)
实际上,您可以在没有特定包的情况下运行测试(独立测试)。为此,像往常一样编写测试包,然后在测试套件定义中,在utpackage.add()中添加以下参数:
samepackage_in => TRUE
同时,确保在这种情况下给出整个包的名称。所以在上面的例子中,它应该是:
utPackage.add('my_suite','ut_Manage_cars', samepackage_in => TRUE);
当要测试的包也包含它的测试代码时,这实际上是真正使用的。但是它也可以用来创建一个只包含测试代码的包,这些代码可以测试多个包甚至集成功能。以这种方式使用它,包名不必以ut_前缀开头,但这是可取的。