如何用Jasmine编写一个随机结果的单元测试?(如掷骰子)

How to write up a unit test in Jasmine for a random outcome? (eg Dice Throw)

本文关键字:结果 掷骰子 单元测试 随机 Jasmine 何用 一个      更新时间:2023-09-26

如何根据随机结果生成器编写Jasmine单元测试?

例如,如何围绕随机掷骰子的结果(或颜色选择器,或天气设置,如果是字符串)编写测试?

骰子代码本身是沿着以下行:

Dice.prototype.rollDice = function() {
1 + Math.floor(Math.random() * 6);
};

我知道下面写的内容是不正确/不完整的,我只是把它作为我陷入困境的一个例子:

it("can generate a random number from the players throw", function() {
var dice = new Dice();
dice.rollDice();
expect(----------------------).toEqual(----------------);
});

我对Jasmine单元测试没有什么经验,如果能展示一个完整的工作示例,我将不胜感激

非常感谢

你可以在谷歌上搜索"如何测试随机性",但正如@radiativematt所说,你只是不在应用程序中测试这种行为,或者至少不作为常规测试套件的一部分。

如果我为一个"骰子"写代码,它应该给出一个从1到6的随机数,我会在写完代码后手动测试它,但我不会写自动测试。也就是说,我会写一个一次性的小程序,它会执行rollDice()一百万次,然后输出每个结果的相对频率。我希望结果只包括数字1到6,并且我希望所有频率都舒适地接近16。如果我对结果感到满意,我会认为这是经过测试的。我可能会添加一条评论,比如"如果你修改了这个代码,记得测试它"。

我会把它写成两个期望:

expect({rolled value}).toBeGreaterThan(0);
expect({rolled value}).toBeLessThan(7);

只是不要在测试中使用math.random。模拟它/重构并测试其他一切。例如,您应该测试math.random是否有任何可能的(一些边缘情况)输出,您的rollDice函数仍然会产生有效的结果