存储过程和测试 - 即使在今天仍是一个问题。为什么?

存储过程和测试 - 即使在今天仍是一个问题。为什么?

问题描述:

现在这只是一个理论,所以如果我走了,随时发表评论,并提出一些想法(我没有用过)。我想这更像是this question的更新,当我查看“相关问题”列表时 - 有很多答案是0。这告诉我有一个真正的差距。存储过程和测试 - 即使在今天仍是一个问题。为什么?

我们的sql设置一般存在多个问题,其中大部分来自存储过程,这些存储过程已经从地狱和其他一些用户函数中滑入db。我最担心的是他们完全没有经过测试 - 当出现问题时,没有人可以100%肯定地说“是的,我知道这是事实”。使调试反复出现的噩梦。

今天下午,我得到了这个疯狂的想法,我们可以开始编写一些用于SQL的程序集(CLR-ing哟!)并测试它们。我遇到了约束(仅限于静态方法,安全/外部/不安全等),总体而言,这并不是很好。至少不如我所希望的那样,并没有帮助我走向自己的目标。

我也尝试在手动测试中设置数据(他们在我出现之前也尝试过)。即使使用ORM来播种数据 - 这也很快变得相当困难并且维护麻烦。当然,这些痛苦中的大部分都是在数据设置中,而不是实际的测试。

那么现在在2011年有什么可以帮助修复/遏制这个问题,或者我们(作为开发者)放弃了测试存储过程的想法,因为成本很高?

Can DBUnit help you?

我自己并没有太多使用它,但您应该能够将数据库设置为已知状态,执行该过程,然后验证数据是否按预期更改。

编辑:看了这更多后,你似乎需要像SQLunit而不是DBUnit。 SQLUnit被描述为

SQLUnit是一个回归和单元 测试工具用于测试数据库 存储过程。 SQLUnit测试套件将被编写为XML文件。 的SQLUnit安全带,这是用Java编写的 ,使用JUnit单元测试框架 到XML转换测试规格 对JDBC调用 比较从 调用与指定的结果所产生的结果。

有缺点;它是基于Java的,可能不是你的偏好,更重要的是,自06年6月以来似乎没有太多的活动:(

+0

得到任何链接显示一个例子? – jeriley 2011-05-11 19:43:38

+0

我不认为DBUnit直接支持过程。使用DbUnit为您的数据库设置初始状态,运行通过过程操作数据库的代码(使用C#,单元测试),然后使用DbUnit对结果状态进行断言。 – Tony 2011-05-11 21:04:30

+1

投票回答我的答案的人会评论为什么吗?如果我说错了,我很想学习。 – Tony 2011-11-28 23:26:09

你实际上可以将存储过程测试作为一个项目。 。做到这一点 - 这里有一个链接,你可能会喜欢:Database Unit Testing with Visual Studio

企业文化统治的日子有些地方测试广泛的其它地方,好了,没有那么多

我做了一个短期合同与财富500强几年前,我在内部设计,构建和部署,我的数据库必须与两个遗留系统连接,很显然,我必须花费更多的时间进行常规测试(有些日子,历史数据查询将返回35行。其他日子,相同的查询将返回20,000行。)

我在Microsoft Access中构建了一个存储和执行SQL语句的工具。 (Access是我被允许使用的唯一工具。)我可以构建当前版本的数据库,填充测试数据,并运行我建立的所有测试 - 其中几百个测试 - 约20分钟。

它能帮助我们进入会议,并拥有一页打印输出,表示我的代码的工作方式与他们签署时的完全一致。但它并不容易实现自动化 - 大部分SQL都是手动编码的。

我们与DbFit取得了很多成功。

是的,设置测试数据是有成本的(没有办法避免这种成本),但Fitnesse platfom(基于DbFit)使您可以重复使用数据填充脚本试验。

+0

有趣...他们想做UI测试,Fitnesse出现了(其他几个人)。你认为这将是一个简单的方法来做到这一点?他们有多相似? – jeriley 2011-05-12 14:05:02

+0

@jeriley - DbFit扩展了Fitnesse - Fitnesse允许数据库测试 - 所以从某种意义上说它们是一回事。 – 2011-05-12 15:16:21