【问题标题】:How to test simple boolean functions?如何测试简单的布尔函数?
【发布时间】:2020-11-21 03:02:27
【问题描述】:

我在理解测试方面遇到了一些问题,因为我几乎从不觉得它是必要的。

如果我有简单的功能,比如

function isMovementOutOfBounds(newPosition) {
  if (newPosition[0] > input[0][0] || newPosition[0] < 0 || newPosition[1] > input[0][1] || newPosition[1] < 0) {
    return true;
  }
  return false;
}

function isMovementForbidden(forbiddenMovements, initialPosition, newPosition) {
  function isArrayInArray(arr, item) {
    const item_as_string = JSON.stringify(item);
    const contains = arr.some((ele) => JSON.stringify(ele) === item_as_string);
    return contains;
  }
  const newMovement = [initialPosition, newPosition];

  if (isArrayInArray(forbiddenMovements, newMovement)) {
    return true;
  }
  return false;
}

他们甚至应该接受测试吗?他们总是有回报,而且总是布尔值。所以我不明白是否真的有必要对其进行测试。

也许我应该测试他们收到的输入类型?

这一切对我来说似乎很愚蠢,我该如何测试这些功能?知道我应该寻找什么吗?

【问题讨论】:

    标签: javascript node.js unit-testing testing


    【解决方案1】:

    至少

    • 测试可帮助您确保您的代码在不同情况下(各种输入,包括边缘情况)都按预期运行
    • 测试可以帮助您保持特定模块与项目其他部分之间的接触点
    • 确保在您开发应用时它仍能满足您的基本要求

    只是为了给你一个线索,关于你可以执行哪种测试,请查看以下演示(这表明你的代码目前还没有功能):

    mocha.setup('bdd')
    
    const { expect } = chai
    
    function isMovementForbidden(forbiddenMovements, initialPosition, newPosition) {
      function isArrayInArray(arr, item) {
        const item_as_string = JSON.stringify(item);
        const contains = arr.some((ele) => JSON.stringify(ele) === item_as_string);
        return contains;
      }
      const newMovement = [initialPosition, newPosition];
    
      if (isArrayInArray(forbiddenMovements, newMovement)) {
        return true;
      }
      return false;
    }
    
    const testSuite = [
      {
        descr: 'Should work for basic coordinates',
        input: [[[0,0],[1,1]], [2,3], [1,1]],
        output: true
      },
      {
        descr: 'Should be able to handle empty array of forbidden movements',
        input: [[], [0,0], [1,1]],
        output: false
      },
      {
        descr: 'Should be able to allow staying at current point',
        input: [[1,1], [0,0], [0,0]],
        output: false
      }
    ]
    
    describe('Basic test', ()=>{
      testSuite.forEach(({input, output, descr}) => 
        it(descr, ()=>{
            expect(isMovementForbidden(...input)).to.equal(output)
        }))
    })
    
    mocha.run()
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/8.0.1/mocha.min.js"&gt;&lt;/script&gt;&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.2.0/chai.min.js"&gt;&lt;/script&gt;&lt;div id="mocha"&gt;&lt;/div&gt;

    【讨论】:

      【解决方案2】:

      测试有很多好处。您可能会检测到不必要的代码,或者理想情况下会发现一些错误。

      在这种情况下,您可以测试您的函数是否返回正确的布尔值,给定一些边缘情况或一些基本输入。

      如果你不想测试太多,至少一两个简单的测试就足以测试功能本身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        • 2011-01-04
        • 2011-04-05
        相关资源
        最近更新 更多