ruby - 如何测试来自 Postgres 的随机排序数据?

标签 ruby postgresql unit-testing random minitest

我正在编写一个 REST API,它以 JSON 格式从 Postgres 数据库返回产品。

我已经编写了集成测试来测试哪些产品会被退回,并且效果很好。刚刚引入了随机订购退回产品的要求。

我已将我的测试更改为不依赖结果返回的顺序。我的问题是测试新的随机要求。

我计划使用 Postgres 的 RANDOM() 关键字在数据库中实现它。如果我“在代码中”执行此操作,我可以将随机代码生成器 stub 以使其始终具有相同的值,但我不确定在数据库中要做什么。

我如何测试我的新随机要求是否有效?

最佳答案

我找到了一种方法来完成我需要的事情。

您可以 set the seed value for Postgres使用 SETSEED()

如果您在执行使用 RANDOM() 的查询之前设置种子,则结果每次都会以相同的顺序返回。

SELECT SETSEED(0.5);

SELECT id, title FROM products ORDER BY RANDOM() LIMIT 2;

种子值在 SELECT 查询后重置。

为了测试数据是否随机返回,我们可以更改种子值。

我不想测试 Postgres 的 RANDOM() 是否有效,但我使用它的代码确实有效。

关于ruby - 如何测试来自 Postgres 的随机排序数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26958799/

相关文章:

ruby-on-rails - Rails3 - oauth 插件问题

postgresql - 在 postGIS 中选择特定半径内的查询

php - 使用来自 Apache libphp5.so 的 .pgpass

java - 在单元测试运行期间禁用某些方面

ruby - 从 AWS S3 下载文件时的文件编码问题

ruby-on-rails - 您如何构造一个 Rails 模型,其中两个属性需要与另一个模型共享相同的关联?

javascript - 流程图呈现意外

postgresql - 您能否将 Workspace Security 添加到现有的 Magnolia 工作区?

c# - 从 HttpResponseMessage 获取内容以使用 c# 动态关键字进行测试

Python单元测试: Unit test the message passed in raised exception