如何为SQL查询编写自动化测试?

5
我们目前采用的系统是编写一些极其复杂的查询语句,这些语句执行多个计算并具有多个连接/子查询。我认为自己经验不足,无法确定这是否正确,因此我同意并试图使用这个系统,因为它具有明显的好处。
我们目前遇到的问题是编写查询语句的人会犯很多错误,并假设一切都正确。我们现在已经指派了一个测试人员来分析所有查询,但这仍然非常耗时和压力巨大。
我想知道如何创建一个自动化程序(如果可能的话,不要专门使用代码编写,因为我可以找到长期的解决方案)来验证10个以上不同输入、验证输出数据并判断计算是否正确。
我知道我可以使用数据库中的特定数据编写脚本,并使用c#(数据库是SQL Server)创建脚本并验证所有输出值,但我想知道官方的“标准”是什么,因为我在这个领域缺乏经验,我想改进。
如果需要更多信息,请添加评论。谢谢。
编辑:我正在使用c#。

你想要测试的查询是从C#程序运行还是手动运行或其他方式运行的? - Dave Schweisguth
@DaveSchweisguth 它们在 C# Web 应用程序中运行。因此,目前的最终输出是原始查询的 HTML 表格。 - James
只是想澄清一下...您是在尝试测试生成/使用查询的应用程序的正确性吗?并且基本上测试这些查询是否正确地反映了一些外部指定的业务规则? - NicholasM
2个回答

4
标准的测试运行SQL查询代码的方法是进行单元测试。(有比单元测试更高级别的测试,但听起来你的问题是针对应用程序的一个小而具体的部分,所以暂不必担心更高级别的测试。)不要尝试直接测试查询,而是测试查询的结果。也就是说,为每个运行查询的C#方法编写单元测试。每个单元测试都应该向数据库中插入已知数据,调用该方法,并断言它返回预期的结果。
在C#中进行单元测试的两种最常见方法是使用Visual Studio单元测试工具NUnit。如何编写单元测试是一个大话题。Roy Osherove的“单元测试的艺术”应该是一个很好的入门指南。

谢谢您的回答。我更新了我的问题,说明我正在使用C#。我们目前没有针对C#级别的自动化测试系统,因此我需要在这个领域的所有建议。 - James
我会将问题标记为正确,因为你给了我一个方向去探索,而其他人似乎没有更好的回答。谢谢 - James

1
这个问题的其他答案,虽然通常正确用于测试代码,但根本没有解决测试数据库的问题。
看起来你需要数据库单元测试。其思想是,你创建一个临时、隔离的数据库环境,具有所需的模式和测试数据,然后验证查询是否返回适当的数据。

1
请返回翻译文本:归档链接: https://web.archive.org/web/20140331215306/http://blogs.msdn.com/b/ssdt/archive/2012/12/07/getting-started-with-sql-server-database-unit-testing-in-ssdt.aspx - Joshua Goldberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接