【问题标题】:Writing test cases for Math.Random(); codewars kata为 Math.Random() 编写测试用例;代码战卡塔
【发布时间】:2017-03-16 06:57:35
【问题描述】:

我正在 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')

有时测试会失败,

预期:前端开发人员,而不是:后端开发人员

有时测试通过,

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

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

【问题讨论】:

    标签: javascript testing tdd


    【解决方案1】:

    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)等编写测试

    【讨论】:

      【解决方案2】:

      当您使用Math.random 函数来确定它们之间的值时,您不能期望每次运行测试时都得到相同的结果。在开发中,最好的测试是用来确定一个参数的变化。

      目标:

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

      【讨论】:

        猜你喜欢
        • 2019-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        • 2013-06-02
        • 1970-01-01
        相关资源
        最近更新 更多