【问题标题】:How to write unit testing for if else statements如何为 if else 语句编写单元测试
【发布时间】:2018-03-17 18:41:01
【问题描述】:

我想使用 Mocha、Chai 或 Jasmin 为名为“fibb”的函数编写单元测试。

app.js

fibb: function (n) {
  if(n==1) {
    return 1;
  } else {
    return (n * (n-1));
  }
}

test.js:

var fibb = require("../app").fibb;
describe('App', function() {
  it('should be 20', function() {
    assert.equal(fibb(5), 20);
  });
});

此代码适用于语句 2(n*(n-1)),但我想为这两种可能性编写(当‘n==1and(n*(n-1))` 语句时)。

【问题讨论】:

  • 所以?写第二个测试?不知道你在挣扎什么。
  • 写另一个测试“应该是一个”
  • 我想在一个测试中测试第一条语句和第二条语句
  • @GabrielBleu 你的意思是,var fibb = require("../app").fibb; describe('App', function() { it('应该是 1', function() { assert.equal(fibb(1), 1); }); it('应该是 20', function() { assert .equal(fibb(5), 20); }); });
  • @NareshAithagoni 这是个坏主意,每次测试你只想测试一件事。

标签: javascript unit-testing jasmine mocha.js chai


【解决方案1】:

每个测试用例应该只测试一个代码执行路径或代码分支,这样会很清楚。您的代码使用if/else 语句。所以,有两个分支。不考虑边界值,至少需要编写两个测试用例。

例如

app.js:

const app = {
  fibb: function (n) {
    if (n == 1) {
      return 1;
    } else {
      return n * (n - 1);
    }
  },
};

module.exports = app;

app.test.js:

var fibb = require('./app').fibb;
const { assert } = require('chai');

describe('App', function () {
  it('should be 20', function () {
    assert.equal(fibb(5), 20);
  });
  it('should be 1', () => {
    assert.equal(fibb(1), 1);
  });
});

测试结果:

  App
    ✓ should be 20
    ✓ should be 1


  2 passing (4ms)

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多