对于大学,我必须为一家销售老爷车的虚构公司设计一个数据库。每周都有一个新的任务要完成。这些是对商务规则和/或新要求的更改。 这意味着我们将拥有逐页构建数据库(包括测试数据)的数据库演变脚本,因此每个新工作表都是新版本(演变)。
其中一个要求是进行适当的测试(在SQL中)。我非常熟悉单元测试,例如JUnit,但我从未做过这样的事情。 对于初学者来说,表有主键和外键,NOT NULL和其他约束。
我该如何测试
使用SQL和一些有用的工具?最好,我想自动运行测试。
如前所述,数据库将填充虚拟数据。
澄清问题: 我的队友只知道一些SQL,仅此而已。所以不可能使用像JUnit这样的东西。 有没有"东西"简单易用,最好是在SQL或某些批处理中执行SQL" thing"这
如果没有,那么问题的简单易用方法是什么?
答案 0 :(得分:1)
使用您用于测试应用程序代码的相同单元测试框架。如果你没有使用它,只需编写查询(测试都是查询)并阅读结果。在每个测试中,针对您想要测试的任何内容运行针对您的数据库的查询。
要测试模式本身(例如,给定列是否具有外键),请针对数据库/表空间/描述模式的任何内容运行查询 - MySQL中的information_schema,Oracle数据字典视图或其他适用于您正在使用的数据库 - 选择应该存在的行,并期望它们各自返回一行。例如,如果您有用户和薪水表的表,并且想要测试薪水是否为外部键入用户,则在MySQL中
use information_schema;
select count(*)
from key_column_usage
where table_schema = 'your_database' and
table_name = 'paychecks' and
column_name = 'user_id' and
referenced_table_name = 'users' and
referenced_column_name = 'id';
要测试数据,请运行查询计算与数据库中预期的偏差,并期望它们不返回任何行。例如,如果您有用户,薪水和tax_payments表,并且您希望没有薪水的用户永远不会有tax_payments,
select count(*)
from users u
where exists (select 1 from tax_payments tp where u.id = tp.id) and
not exists (select 1 from paychecks p where u.id = p.id);
如果您知道您的架构可以防止错误发生(通过非空约束或外键或者您有什么),则无需检查该错误的数据。另一方面,这是大学,所以也许你会被要求做两件事。
答案 1 :(得分:0)
What we do正在将测试集成到部署系统中。
一般来说步骤: