编写Math.Random()的测试用例; codewars kata

时间:2015-10-27 09:51:43

标签: javascript testing tdd

我在Codewars上创作了我的第一个简单的Kata。 Kata的目标是修复代码 这是完整的工作解决方案,

function yourFutureCareer() {
  var career = Math.random();
    if (career <= 0.32) {
        return 'FrontEnd Developer';
    } else if (career <= 0.65) {
        return 'BackEnd Developer';
    } else {
        return 'Full-Stack Developer';
    } 
} 

yourFutureCareer();

这是用户将使用的初始解决方案,

function {
var : Math.random();
    if (career <= 0.32) {
        return = FrontEnd Developer
     else if (career <= 0.65) 
        return : BackEnd Developer,
    } else {
        return 'Full-Stack Developer'
    }

    yourFutureCareer();

为了发布Kata,我必须提供测试用例,以确定解决方案是否有效。 我试过写第一个测试用例,

Test.assertSimilar(yourFutureCareer(), yourFutureCareer(), 'true')

有时测试失败,

  

预期:FrontEnd Developer,而不是:BackEnd Developer

有时测试通过,

  

测试通过:值==全栈开发人员

那么,如何编写测试用例以便验证解决方案?任何示例代码或示例都会有所帮助。

2 个答案:

答案 0 :(得分:0)

Math.random()是您无法在测试中控制的外部性,因此您需要重构,以便您拥有具有确定性行为的可测试函数,例如:

function determineCareer(career) {
    if (career <= 0.32) {
        return 'FrontEnd Developer';
    } else if (career <= 0.65) {
        return 'BackEnd Developer';
    } else {
        return 'Full-Stack Developer';
    } 
}

function yourFutureCareer() { return determineCareer(Math.random(0)); }

然后您可以为determineCareer(0.32)determineCareer(0.321)等编写测试

答案 1 :(得分:0)

当您使用Math.random函数来确定它们之间的值时,您不可能期望每次运行时从测试中返回相同的结果。在开发过程中,最佳测试用于确定一个参数的变化。

目的:

  1. 从您的测试中获得相同的预期结果,因此请尽量不要使用外部因素,并避免使用Math.random
  2. Test.assertSimilar(actual, expected, msg)其中actual是传递给您的函数的参数,expected是您假设由kata返回的正确值,msg