可以对视图查询进行全面测试吗?

时间:2013-08-01 21:00:04

标签: sql unit-testing sql-view

所以我有一个问题:

select
  c.STRING,
  a.STRING,
  b.STRING,
  b.STRING3,
  a.STRING2,
from TABLE_A a,
  VIEW_B b,
  TABLE_C c
where b.STRING2 = a.STRING2
  and a.INT = #value#
  and c.INT = a.INT
  and c.STRING IN ('string1', 'string2')

VIEW_B是视图,TABLE_A和TABLE_C是普通表。我正在尝试对此查询进行单元测试。我看到它的方式是因为它是一个选择,我需要制作一些虚拟数据,将其插入表中,然后运行上面的查询并确保它返回我输入的相同数据。但是,VIEW_B是一个查看,无法插入。所以我需要从VIEW_B中获取一些真实数据,并在其他2个表中获取相应的数据。但是,到那时我只是运行相同的查询,而且我必须抓住a.INT。所以我的结论是,如果我有一个使用视图的查询,它就无法完全测试。

这是真的吗?无论如何,测试此查询的最佳方法是什么?

请记住,这是一个工作项目,我无法更改表格或查询本​​身的架构,我必须针对实际数据库运行我的测试。

1 个答案:

答案 0 :(得分:3)

为什么不为构成VIEW_B的任何表提供样本数据?

或者,将“VIEW_B”替换为内联实体声明:

(我使用了oracle特定的DUAL虚拟表,但使用适用于你的任何东西)

select
  c.STRING,
  a.STRING,
  b.STRING,
  b.STRING3,
  a.STRING2
from TABLE_A a,
  (select 'blah' string, 123 INT from dual) b,
  TABLE_C c
where b.STRING2 = a.STRING2
  and a.INT = #value#
  and c.INT = a.INT
  and c.STRING IN ('string1', 'string2')