utplsql测试套件看起来像是在运行,但事实并非如此

时间:2013-05-26 23:30:58

标签: oracle plsql

我是使用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错误并没有告诉我它也失败了。

THKS

2 个答案:

答案 0 :(得分:1)

问题在于,如果您有一个包Manage_cars,那么与该包相关的所有测试代码必须位于包ut_Manage_cars中。 utplsql需要你的所有测试包都有ut_前缀(如果你真的想要,你可以以某种方式改变这个前缀......无论如何你仍然需要为每个包含测试程序的包提供一个前缀)。

因此,在这种情况下,当您想要将包添加到测试套件时,您可以执行以下操作:

utPackage.add('my_suite','Manage_cars');

请注意,向套件添加软件包时,需要添加包含需要测试的代码的软件包。不是包含断言和其他utplsql相关代码的代码(必须放在ut_Manage_cars中)

希望这有帮助..如果没有回复,我会尽快回答:)

答案 1 :(得分:1)

实际上,您可以在没有特定包的情况下运行测试来运行它(独立测试)。为此,请正常编写测试包,然后在测试套件定义中,在utpackage.add()中添加以下参数:

 samepackage_in => TRUE

另外,请确保在这种情况下您提供整个包名称。所以在上面的例子中它将是:

utPackage.add('my_suite','ut_Manage_cars', samepackage_in => TRUE);

这实际上真正用于待测试的包也包含其测试代码时。但它也可以用于创建一个包含测试代码的包,该包可以测试多个包,甚至可以测试集成功能。以这种方式使用它,包名称不必以ut_前缀开头,但建议使用。