2017-02-27 48 views
0

我有一个存储过程,它使用getdate()来获取当前日期并与提供的进行比较。使用getdate进行单元测试存储过程的最佳做法()

但是测试出现问题 - >通常测试我们已经准备好输入和输出数据以及这些数据之间的预定义日期。但getdate()将始终返回当前时间,因此测试结果将随时间而有所不同。

我想没有办法改变getdate()会返回什么?但是从存储过程中取出getdate()并使用一些输入参数,而不是一个选项。

测试此存储过程以使测试结果保持不变的最佳做法是什么?

+3

您可以创建一个调用'get-date'并返回输出的自定义函数;那么当你测试时你可以重写该函数的定义来返回你的测试值? – JohnLBevan

+1

除了John的建议之外,我认为唯一的另一种方式是将日期传递给proc。 – DavidG

+1

你能否澄清你是如何单元测试存储过程的?通常这是集成测试的领域。您是否在使用基于SQL的框架,如TSQLUnit,Microsoft的SQL Server数据工具或其他? – TrueWill

回答

0

看起来它不能做短更改服务器的日期或修改的存储过程:

Changing the output of Getdate

在这些约束下,您可以检查过程返回没有错误的结果集。如果过程查询其他表,则可以使用基于当前日期的数据填充这些表,调用过程,验证结果,然后从其他表中删除数据。或者,如果程序是真正固定且不变的,那么自动化测试的成本可能会高于此(罕见)情况下的值。您可以手动验证过程(QA)。

+0

是的,跳跃更好的方法。对于我的案例替代功能,如@JohnLBevan所提及的,在你提供的链接中将是最好的,因为不希望在测试中引入日期算术,并且基于真实的当前日期,因为在这种情况下不是恒定的几周:( – nahab