UTPLSQL测试套件看起来像正在运行,但事实并非如此。



我刚开始使用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_前缀开头,但这是可取的。

相关内容

最新更新