单元测试抓取整个表内容的SQL查询

时间:2016-06-07 13:59:42

标签: mysql sql unit-testing

我试图对我用来获取数据库中表的全部内容的函数进行单元测试。但是,我不确定测试查询的最佳方法是什么。通常,如果我正在测试一个查询,该查询抓取与某种特定ID或其他唯一标识符绑定的数据,我会将数据插入数据库,然后确保我得到相同的信息。

但是,在这种情况下,我已经有了一个现有数据池。表中有几百条记录,我不想对它们进行硬编码以进行比较。如果我这样做,每次将新数据添加到表中时,我还必须更新测试。如果我没有对数据进行硬编码,我将不得不对相同的数据运行第二次查询以获取测试结果的信息,这非常类似于将函数与自身进行比较。

我可以使用的一个潜在解决方案是在测试脚本的开头创建我想要测试的表的副本,并在其中插入预定义的数据集,运行测试,然后回滚我的更改。但是,我不确定这是否是测试我的功能的最佳方式。

有没有更好的方法来测试这种查询?

1 个答案:

答案 0 :(得分:0)

测试的最佳实践是在每次测试开始之前,将一个单独的测试环境(包括数据库的内容)可靠地设置为已知状态。这样,测试可以高度针对性,彼此隔离,并保持可维护性。

最简单的方法是在测试时为您的应用程序设置不同的配置,例如,您可以使用不同的测试数据库进行连接。

然后程序会这样:

  1. 在测试设置中,您可以在表格中添加一些硬编码行(这称为夹具)。
  2. 在实际测试中,检查函数返回的行是否是您在设置中放置的行。
  3. 在清理代码中,您将删除表格中的所有数据。
  4. 最后一步将测试数据库返回到所有测试都可以采用的干净状态。