当我为我的存储过程编写单元测试时,它们通常看起来像这样:
/* Unit test for stored procedure which runs a query */
/* Define #temp table with structure of query results */
/* Define and set variables for stored procedure parameters */
/* If stored procedure queries from a particular table...*/
/* Truncate table and populate with sample data */
/* Call stored procedure using variables but insert results into table */
/* INSERT #temp EXEC usp_TestProc @P1=1, @P2 = 'X' */
/* Query #temp table to confirm that all fields have certain values */
/* Query #temp table to confirm that certain number of rows exist */
/* If results are incorrect, display error message */
虽然这会奏效,但在某种程度上感觉笨拙,并且在需求不断变化的长期项目过程中很难维护。
- 有没有更好的方法(或标准方法)来测试这样的存储过程?
- 维护的困难是否只是工作的一部分,值得为进行单元测试而付出努力?我不得不说,在我的大部分工作中,DBA 很少首先进行单元测试。
我写了一系列关于使用DBTestUnit对存储过程进行单元测试的博客,可能会有用。
例如,使用TST - TSQL 测试工具。它将使您的过程自动化。查看我在sqa上询问的其他解决方案
运气。
到目前为止,我从事 T-SQL 单元测试已有四年多了。我认为使用 C# 更容易,它更通用。例如,在 C# 中,我可以毫无问题地对返回两个或更多结果集的存储过程进行单元测试——如果使用 T-SQL,这显然是不可能的。我在这篇文章和这篇博文中描述了这个过程。