javascript - 使用 Mocha 和 Chai 在 JavaScript 中测试随机数函数

标签 javascript node.js statistics mocha.js chai

假设我有一个函数返回一个数乘以二。

function double(number){
  return number * 2;
}

使用 Mocha 进行测试和 Chai很容易。

var expect = require("chai").expect;

describe("#double", function(){
  it("should double a number", function(){
    expect(double(2)).to.equal(4);
    expect(double(4.5)).to.equal(9);
    expect(double(-3)).to.equal(-6);
  });
});

但现在假设我有一个函数返回两个指定整数之间的随机整数,将它们称为 minmax

function randBetween(min, max){
  return Math.floor(Math.random() * (max - min + 1) + min);
}

我无法预测返回值将等于什么。我可以编写一个测试来确保返回值大于或等于 min 且小于或等于 max,但这实际上并没有测试返回值是随机。是否有统计上有效的方法来测试我的 randBetween 函数是否正常工作?

附言我知道该函数不处理无效参数,例如如果 max 小于 min。请暂时搁置这一点。

最佳答案

您无法通过一次调用来测试它;您将需要大量调用来证明随机性(在随机性的合理定义范围内)。

在大量调用中,你会希望:

  1. 确保它不会返回超出范围的值
  2. 确保它确实在随机性的合理定义范围内提供随机值(假定它是确定性 PRNG)

This question and its answers进入如何做后者,虽然遗憾的是接受的答案中的链接现在大部分都死了。

美国国家标准技术研究院有一整节专门介绍 PRNG,包括 this page describing several tests您可以使用它来确保返回内容的随机性。

当然,如果您的函数实现正确(并且它看起来是,如果它打算返回 min <= value < max 通常情况下),最终您正在测试底层 Math.random 的随机性。实现。

关于javascript - 使用 Mocha 和 Chai 在 JavaScript 中测试随机数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44984952/

相关文章:

javascript - jquery 快速悬停问题

javascript - MVC 通过客户端删除自定义验证规则

javascript - Node JavaScript - 十进制字符串到整数

javascript - Karma 公共(public) api 缺少 configFile 选项

c# - asp 的 Javascript 更多/更少文本按钮 :label

javascript - 将 XMLHttpRequest 与 Google Calendar API v3 日历结合使用 :get Request

javascript - Jade 变渲染

python - 将数据拟合到分布?

r - 将R中的时间数据绘制为各种分辨率(分钟,小时,秒等)。

r - 对 R 中的整洁数据同时执行多个 t.tests