使用单元测试项目进行CLR SQL存储过程测试

时间:2009-06-22 17:43:10

标签: sql unit-testing stored-procedures clr

我刚刚开始使用VS2008为SQL 2008编写clr存储过程。在编写c#代码时,我习惯于单独的“测试项目”,我将放置所有单元测试代码,但它首先出现脸红,我不能与clr sql项目与存储过程相同的设置。感觉就像这样可以完成,而且我缺少一些配置参数,但我不确定那些可能是什么。

我正在使用

  • Visual Studio 2008
  • MS Test
  • MS SQL 2008

我的要求是:

  1. 在visual studio调试器中调试存储过程
  2. 有一堆单元测试来测试存储过程
  3. 有谁知道我如何让单元测试项目正确地将存储过程解密到服务器,连接到sql server,并允许我逐步完成单元测试到服务器上的存储过程?

    **** **** UPDATE

    感谢大家到目前为止的答案,但他们并不是我所寻找的。

    Mark Seemann's下面的答案是一个我不知道的有趣方法,当涉及到将数据库重置为已知状态时,我肯定会使用。但是,我希望调试CLR存储过程,并且它不会出现Mark的方法将允许我从单元测试项目步进到SQL服务器,并调试服务器上的代码。

    我希望实际调试服务器上的C#,就像下面列出的解决方案pho3nix一样。但是,使用此标准方法,您需要使用“Test.sql”文件编写测试脚本,而不是使用Visual Studio中的单元测试项目。

    我希望我的解决方案中有两个项目,一个用于我的CLR存储过程,另一个用于我的单元测试项目。当我想在我的单元测试项目中运行我的测试时,我希望对我的CLR存储过程项目所做的所有更改都将发布到服务器,测试项目将开始执行,如果我在CLR中设置了一个断点单元测试开始测试存储过程时它将在服务器上中断,然后我可以逐步执行代码。

    到目前为止,我找到的最接近的解决方案是Alex Kuznetsov and Alex Styler,但是使用此解决方案我无法单步执行SQL服务器。

    ****更新2 ****

    这更像是一个“颠簸”让这个问题重新出现......我仍然没有从单元测试中踩到SQL服务器的运气。还有其他想法吗?

3 个答案:

答案 0 :(得分:2)

您必须在连接上启用SQL / CLR调试才能调试代码。 为此,请按照此处的说明操作 http://msdn.microsoft.com/en-us/library/ms165039(VS.80).aspx

请注意,在调试C#SP时,SQL Server中的所有托管线程都将在调试期间挂起

希望这有帮助。

答案 1 :(得分:2)

创建项目时,我有一个带有数据库的树视图节点和一个名为SQL Server Project的项目。

alt text http://img514.imageshack.us/img514/8523/81345560.jpg

接下来,当创建项目模板时,我会获得Test Scripts(Test.sql),我可以使用常见的sql过程和命令测试我所有的SQL Server CLR类。

alt text http://img17.imageshack.us/img17/7826/38591345.jpg

通过这个,您可以通过调试获得CLR的开发接口。 Test.sql就像CLR类的单元类。

PS。不要忘记SQL Server配置中的活动CLR。

答案 2 :(得分:1)

前一段时间我wrote pretty extensively on this subject。我总是以TDD方式实现我的数据访问组件。请查看链接中的帖子 - 文章本身可能无法为您提供最佳概述,但您也可以下载示例代码并随意查看。

我认为它符合您的所有要求。