我正在开发一个大型的3层应用程序。数据库有很多代码(存储过程,函数,触发器...)。我正在寻找一种有效的方法来实现数据库代码的单元测试。


“我应该使用单独的数据库来运行单元测试吗?”
“应该如何实现存储过程以准备单元测试?”

欢迎任何帮助,提示,技巧!

谢谢。

评论

您正在使用什么环境?在某些环境中有一些特殊工具可用。

@Ethel Evans Windows,SQL Server 2008,Visual Studio 2008

#1 楼

您还可以检查工具-TST-TSQL测试工具。可在codeplex http://tst.codeplex.com/
中使用该工具
对于DB测试自动化,以下参数可通过TST-TSQL单元


运行测试用例套件
能够运行单个测试用例
处理断言而无需任何额外的编码
可以实现数据驱动的测试;这种方法涉及QA编写TSQL代码


#2 楼

我建议您使用Visual Studio 2008 Database Professional的数据库单元测试功能(又称“ Data Dude”)。这里有一篇很棒的深入博客文章,其中包括完整的分步指南演练。

评论


我明白了这是一个标准的解决方案。我认为这不会帮助我。我以任何方式感谢您的链接和答复。

– Garik
2011年5月26日在12:30

#3 楼

“我应该使用单独的数据库来运行单元测试吗?”

是的!有效的测试需要对环境的控制。

评论


确实。没有控制,您的预期结果和接收结果将如何匹配?如果没有匹配项,您如何确定差异是良性还是错误?

–Peter M.-代表莫妮卡(Monica)
2014年7月9日在16:21

#4 楼

尝试DBFit。我相信你一定会喜欢的。您可以使用与应用程序相同的方式对数据库执行ATDD。

下面的链接将提供许多有关如何进行的信息,包括Fitnesse和Dbfit的一些背景知识(帖子中的链接)。

http://gojko.net/fitnesse/dbfit/

#5 楼

不久前,我将其发布在SO上。关于关闭数据库测试中的漏洞有一系列文章。在给定文章的示例中,他使用了C#和NUnit。消除那些漏洞-测试存储过程因此这可能会有所帮助。我已经做过类似的事情,用C#编写了小的执行包装程序,它们只执行很少的操作,但是执行数据层。

#6 楼

我假设您指的是自动化单元测试,而不是手工执行的测试。我将自动化单元测试视为达到目的而不是达到目的的一种手段。一些开发人员从自动化的单元测试中获得了很多价值(我是开发人员时所做的)。其他人则不依靠自动化来编写出色的高质量代码。您非常了解自己的工作,知道您可能会在哪里引入错误。如果您认为自己可能编写有故障的存储过程,函数或触发器,则一定要编写一些单元测试。否则,我可能会在持久层进行测试。 (或者根本不-再一次,您可以自己判断。)

在持久层进行单元测试的另一个原因是,如果您希望手动查询数据库,即通过键入一些即席SQL。

评论


我已经手工测试过我的代码。它适用于一般情况(业务逻辑足够大)。一个大问题是数据库代码更改的管理。我应该知道,旧代码仍在工作,并已准备好受到外部“影响”。我想测试业务逻辑,所以我要在数据库层建立业务模型和代码

– Garik
2011年5月25日13:37