如何为SQl查询编写测试用例?
答案 0 :(得分:1)
这似乎很有趣,因为我不确定你的要求。
恕我直言,测试用例可以用于功能或系统测试(或一般的黑盒测试)。测试用例是需求规范或用户故事的翻译。在测试查询的情况下,我不确定是否需要编写测试用例(这将成为白盒测试)。在这种情况下,最好为它们编写单元测试,而不是创建手动测试用例。可能是我在这里遗漏了一些东西。
然而,考虑到你有一个我不知道的不同意见,以下是我的想法。
如果您的用户故事或需求规范明确谈到了连接的数量和类型,要使用的表等,那么您可以单独编写测试用例以检查是否存在任何偏差。例如。一个测试用例可以检查类型连接以检查它们是否符合要求,另一个测试用例可以验证所使用的表,检查开发人员是否仅使用了预期的表而不是其他任何内容。
编辑:如果您愿意编写单元测试,请查看DBUnit哪些可以帮助您
例如,请考虑以下方案。你有一所学校的DB。您现在已经编写了一个复杂的查询来检索学生列表。您必须检查此查询是否正常工作。然后,您可以使用DBUnit或Unitils创建单元测试用例,它将动态创建表并加载示例数据,执行查询,然后将结果集与您期望的数据进行比较。所有这一切都在一个自动单元测试中。
这是Unitils的一个例子,
公共类UserDAOTest扩展了UnitilsJUnit4 {
@Test
@DataSet("UserDAOTest.testFindByMinimalAge.xml")
public void testFindByMinimalAge() {
List<User> result = userDao.findByMinimalAge(18);
assertPropertyLenientEquals("firstName", Arrays.asList("jack"), result);
}
}
在执行此测试之前,此"UserDAOTest.testFindByMinimalAge.xml"
中的示例数据将加载到您配置的表中,稍后将执行测试及其中的查询。同样,如果使用注释@ExpectedDataSet
而不是@DataSet
,则在执行测试后,此xml中的数据将用于比较结果集。
如果您使用的是JPA-Hibernate,您也可以使用内存数据库执行effective unit testing。
希望这有帮助。
答案 1 :(得分:0)
各种数据库都有不同的测试套件。 MySQL / Percona Server / MariaDB都使用mysql-test-run的变体:
http://dev.mysql.com/doc/mysqltest/2.0/en/mysql-test-run-pl.html
Drizzle还使用了以下变体: http://docs.drizzle.org/testing/test-run.html
这些是基于差异的简单测试。您编写了您希望看到的查询,让运行程序执行它们然后验证结果。您将预期输出保存在.result文件中,并确保后续运行显示相同的行为/结果。
您可能希望使用其他工具,例如随机查询生成器:
http://forge.mysql.com/wiki/RandomQueryGenerator
此工具的优势在于能够针对Postgres和Javadb系统以及基于MySQL的系统运行。
它还允许对2台服务器执行相同的查询。这允许人们通过针对被测服务器和可信实现(比如同一查询的Drizzle与股票MySQL结果进行比较)和手动检查查询结果来测试复杂查询。