utPLSQL:使用现有表进行测试

时间:2018-11-21 13:11:03

标签: oracle unit-testing plsql utplsql

有一个名为summary_table的表,该表比较两个表并检查这两个表的列,约束和数据是否相同。被检查的表(table1)是第一个版本,另一个(table2)是第二个版本。摘要表具有以下列:column_status(检查两个表的列是否相同),data_status(检查两个表中的数据是否相同)和constraints_status(检查两个表的约束是否相同)显示“通过”或“失败”。     summary_table中有多个表(1000多个)。我该如何测试它们中的每一个?

summary_table的外观如下:

TABLE1     TABLE1     COLUMN_STATUS     DATA_STATUS   CONSTRAINTS_STATUS
--------------------------------------------------------------------------       
CUST1      CUST1         PASS              PASS              PASS
SUPP1      SUPP1         PASS              FAIL              PASS

编辑:我有一个包含多行的表。每行有两个表名,这些表名已经与状态列进行比较,以显示其通过还是失败。我想使用状态列测试每一行。

1 个答案:

答案 0 :(得分:0)

可以检查特定的游标数据,也可以简单地查询包含失败的行数。这样,您的检查就非常简单,但是不会报告非常具体的输出。

如果我理解正确,那么您基本上是想检查另一个测试套件的结果,因此,我认为最好将此测试保持其通用设置(例如,没有硬编码的表列表),但是同时让它报告特定问题。

执行此操作的一种可能方法是查询表中的所有行,并检查三列中的每一列。您可以在自定义消息中使用表名,因此测试结果将包含有关哪个表未通过测试的特定信息。因此,对于您的测试数据,测试可能如下所示:

  -- %test(All bladiebla checks in summary table should be passed)
  procedure Check_Summary_Status;


  procedure Check_Summary_Status is
  begin
    for r in (select * from Summary_Status t) loop
      ut.expect(r.COLUMN_STATUS, 'Column status for table ' || r.Table1).to_equal('PASS');
      ut.expect(r.DATA_STATUS, 'Data status for table ' || r.Table1).to_equal('PASS');
      ut.expect(r.CONSTRAINTS_STATUS, 'Constraint status for table ' || r.Table1).to_equal('PASS');
    end loop;
  end;

输出看起来像这样,清楚地说明了哪些检查失败以及针对哪个表。

1) check_summary_status
    "Data status for table SUPP1"
    Actual: 'FAIL' (varchar2) was expected to equal: 'PASS' (varchar2) 
    at "MYSCHEMA.TST_MY_DEMO", line 10 ut.expect(r.DATA_STATUS, 'Data status for table ' || r.Table1).to_equal('PASS');