Programming Self-Study Notebook

勉強したことを忘れないように! 思い出せるように!!

Node.js+Jestで単体テスト:Level2(異常系テスト)

f:id:overworker:20200916000438p:plain:h150

レベル2:異常系テストの追加

  • 異常系の判定ができるようになる

レベル2-1:文字種(サポート内)

レベル2-1-1:数字

レベル2-1-1-1:半角

レベル2-1-1-1-1:境界値外
レベル2-1-1-1-1-1:入力パラメータ
// ------
// Number.MIN_SAFE_INTEGER~Number.MAX_SAFE_INTEGER(=~9007199254740991)
//   安全に処理ができる保証がある範囲
// 注意) 上記範囲を超えたとしても、結果が破損することが決まっているわけではない
// ------
describe('Level 2-1-1-1-1-1:入力パラメータ', () => {
  test('adds Number.MAX_SAFE_INTEGER+1 + -1 to equal Number.MAX_SAFE_INTEGER', () => {
    // expect(sum(Number.MAX_SAFE_INTEGER+1, -1)).not.toBe(Number.MAX_SAFE_INTEGER);
    expect(sum(Number.MAX_SAFE_INTEGER+1, -1)).toBe(Number.MAX_SAFE_INTEGER);
  });
});
レベル2-1-1-1-1-2:出力パラメータ
describe('Level 2-1-1-1-1-2:出力パラメータ', () => {
  test('adds Number.MAX_SAFE_INTEGER + 1 to equal', () => {
    // expect(sum(Number.MAX_SAFE_INTEGER, 1)).not.toBe(Number.MAX_SAFE_INTEGER+1);
    expect(sum(Number.MAX_SAFE_INTEGER, 1)).toBe(Number.MAX_SAFE_INTEGER+1);
  });
});
レベル2-1-1-1-1-3:途中結果
describe('Level 2-1-1-1-1-3:途中結果', () => {
  test('スキップ', () => {
  });
});

レベル2-2:文字種(サポート外)

レベル2-2-1:数字全角

describe('Level 2-2-1-1:全角', () => {
  test('スキップ', () => {
  });
});

レベル2-2-2:文字列

レベル2-2-2-1:半角

レベル2-2-2-1-1:半角数字文字
describe('Level 2-2-2-1-1:半角数字文字', () => {
  test('adds "1" + 1 to equal 2', () => {
    expect(sum("1", 1)).toBe(false);
  });
  test('adds 1 + "1" to equal false', () => {
    expect(sum(1, "1")).toBe(false);
  });
  test('adds "1" + "1" to equal false', () => {
    expect(sum("1", "1")).toBe(false);
  });
});
レベル2-2-2-1-2:半角英文字
describe('Level 2-2-2-1-2:半角英字文字', () => {
  test('adds "a" + 1 to equal 2', () => {
    expect(sum("a", 1)).toBe(false);
  });
  test('adds 1 + "b" to equal false', () => {
    expect(sum(1, "b")).toBe(false);
  });
  test('adds "a" + "b" to equal false', () => {
    expect(sum("a", "b")).toBe(false);
  });
});

レベル2-2-2-2:全角

レベル2-2-2-2-1:全角数字文字
describe('Level 2-2-2-2-1:全角数字文字', () => {
  test('adds "1" + 1 to equal 2', () => {
    expect(sum("1", 1)).toBe(false);
  });
  test('adds 1 + "1" to equal false', () => {
    expect(sum(1, "1")).toBe(false);
  });
  test('adds "1" + "1" to equal false', () => {
    expect(sum("1", "1")).toBe(false);
  });
});
レベル2-2-2-2-2:全角英文字
describe('Level 2-2-2-2-2:全角英字文字', () => {
  test('adds "a" + 1 to equal 2', () => {
    expect(sum("a", 1)).toBe(false);
  });
  test('adds 1 + "b" to equal false', () => {
    expect(sum(1, "b")).toBe(false);
  });
  test('adds "a" + "b" to equal false', () => {
    expect(sum("a", "b")).toBe(false);
  });
});

レベル2-2-2-3:絵文字

describe('Level 2-2-2-3:絵文字', () => {
  test('adds 1 + 🐸 to equal false', () => {
    expect(sum(1, '🐸')).toBe(false);
  });
  test('adds 🐸 + 1 to equal false', () => {
    expect(sum('🐸', 1)).toBe(false);
  });
  test('adds 🐸 + 🐸 to equal false', () => {
    expect(sum('🐸', '🐸')).toBe(false);
  });
});

レベル2-2-2-4:スペースのみ

レベル2-2-2-4-1:半角スペース
describe('Level 2-2-2-4-1:半角スペース', () => {
  test('adds 1 + " " to equal false', () => {
    expect(sum(1, ' ')).toBe(false);
  });
  test('adds " " + 1 to equal false', () => {
    expect(sum(' ', 1)).toBe(false);
  });
  test('adds " " + " " to equal false', () => {
    expect(sum(' ', ' ')).toBe(false);
  });
});
レベル2-2-2-4-2:全角スペース
describe('Level 2-2-2-4-2:全角スペース', () => {
  test('adds 1 + " " to equal false', () => {
    expect(sum(1, ' ')).toBe(false);
  });
  test('adds " " + 1 to equal false', () => {
    expect(sum(' ', 1)).toBe(false);
  });
  test('adds " " + " " to equal false', () => {
    expect(sum(' ', ' ')).toBe(false);
  });
});

レベル2-2-2-5:空文字列

describe('Level 2-2-2-5:空文字列', () => {
  test('adds 1 + "" to equal false', () => {
    expect(sum(1, '')).toBe(false);
  });
  test('adds "" + 1 to equal false', () => {
    expect(sum('', 1)).toBe(false);
  });
  test('adds "" + "" to equal false', () => {
    expect(sum('', '')).toBe(false);
  });
});

レベル2-2-3:特殊文字

レベル2-2-3-1:記号

describe('Level 2-2-3-1:記号', () => {
  test('adds "\b" + 1 to equal false', () => {
    expect(sum('\b', 1)).toBe(false);
  });
  test('adds "\t" + 1 to equal false', () => {
    expect(sum('\t', 1)).toBe(false);
  });
  test('adds "\v" + 1 to equal false', () => {
    expect(sum('\v', 1)).toBe(false);
  });
  test('adds "\n" + 1 to equal false', () => {
    expect(sum('\n', 1)).toBe(false);
  });
  test('adds "\r" + 1 to equal false', () => {
    expect(sum('\r', 1)).toBe(false);
  });
  test('adds "\f" + 1 to equal false', () => {
    expect(sum('\f', 1)).toBe(false);
  });
  test('adds "\'" + 1 to equal false', () => {
    expect(sum('\'', 1)).toBe(false);
  });
  test('adds "\"" + 1 to equal false', () => {
    expect(sum('\"', 1)).toBe(false);
  });
  test('adds "\`" + 1 to equal false', () => {
    expect(sum('\`', 1)).toBe(false);
  });
  test('adds "\\" + 1 to equal false', () => {
    expect(sum('\\', 1)).toBe(false);
  });
  test('adds "\0" + 1 to equal false', () => {
    expect(sum('\0', 1)).toBe(false);
  });
});

レベル2-2-3-2:number

describe('Level 2-2-3-2:number', () => {
  test('adds "number" + "number" to equal false', () => {
    expect(sum("number", "number")).toBe(false);
  });
});

レベル2-2-3-3:null

describe('Level 2-2-3-3:null', () => {
  test('adds null + 1 to equal false', () => {
    expect(sum(null, 1)).toBe(false);
  });
  test('adds 1 + null to equal false', () => {
    expect(sum(1, null)).toBe(false);
  });
  test('adds null + null to equal false', () => {
    expect(sum(null, null)).toBe(false);
  });
});

レベル2(ボーナス):
afterAllafterEachbeforeAllbeforeEach

const sum = require('../sum');

let paramArray = [];
let paramAll = [
  ['Level 0        :正の整数',1, 2, 3],
  ['Level 1-1      :負の整数',-1, -2, -3],
  ['Level 1-2      :小数',1.2, 3.4, 4.6],
  ['Level 1-3      :境界値',Number.MAX_SAFE_INTEGER, 0, Number.MAX_SAFE_INTEGER],
  ['Level 1-3      :境界値',Number.MAX_SAFE_INTEGER-1, 1, Number.MAX_SAFE_INTEGER],
  ['Level 1-3      :境界値',Number.MIN_SAFE_INTEGER, 0, Number.MIN_SAFE_INTEGER],
  ['Level 1-3      :境界値',Number.MIN_SAFE_INTEGER+1, -1, Number.MIN_SAFE_INTEGER],
  ['Level 1-4-1    :特異値(0) 入力値が0',1, 0, 1],
  ['Level 1-4-1    :特異値(0) 入力値が0',1, 0.0, 1],
  ['Level 1-4-1    :特異値(0) 入力値が0',0, 1, 1],
  ['Level 1-4-1    :特異値(0) 入力値が0',0.0, 1, 1],
  ['Level 1-4-2    :特異値(0) 結果が0',1, -1, 0],
  ['Level 1-4-2    :特異値(0) 結果が0',1, -1, 0.0],
  ['Level 1-4-2    :特異値(0) 結果が0',-1, 1, 0],
  ['Level 1-4-2    :特異値(0) 結果が0',-1, 1, 0.0],
  ['Level 1-4-3    :特異値(0) 入力値が0,結果が0',0, 0, 0],
  ['Level 1-4-3    :特異値(0) 入力値が0,結果が0',0.0, 0.0, 0.0],
  ['Level 2-1-1-1-1:境界値外(入力)',Number.MAX_SAFE_INTEGER+1, -1, Number.MAX_SAFE_INTEGER],
  ['Level 2-1-1-1-1:境界値外(入力)',Number.MAX_SAFE_INTEGER, 1, Number.MAX_SAFE_INTEGER+1],
  // ['Level 2-1-1-1-2:境界値外(途中経過)',],
  // ['Level 2-2-1-1  :全角文字列',],
  ['Level 2-2-2-1-1:半角数字', "1", 1, false],
  ['Level 2-2-2-1-1:半角数字', 1, "1", false],
  ['Level 2-2-2-1-1:半角数字',"1", "1", false],
  ['Level 2-2-2-1-2:半角文字列',"a", 1, false],
  ['Level 2-2-2-1-2:半角文字列', 1, "b",false],
  ['Level 2-2-2-1-2:半角文字列', "a", "b",false],
  ['Level 2-2-2-2-1:全角数字文字',"1", 1,false],
  ['Level 2-2-2-2-1:全角数字文字', 1,"1", false],
  ['Level 2-2-2-2-1:全角数字文字', "1","1", false],
  ['Level 2-2-2-2-2:全角英字文字', "a", 1,false],
  ['Level 2-2-2-2-2:全角英字文字', 1, "b", false],
  ['Level 2-2-2-2-2:全角英字文字', "a", "b", false],
  ['Level 2-2-2-3  :絵文字', 1, '🐸', false],
  ['Level 2-2-2-3  :絵文字', '🐸', 1, false],
  ['Level 2-2-2-3  :絵文字', '🐸', '🐸', false],
  ['Level 2-2-2-4-1:半角スペース', 1, ' ', false],
  ['Level 2-2-2-4-1:半角スペース', ' ', 1, false],
  ['Level 2-2-2-4-1:半角スペース', ' ', ' ', false],
  ['Level 2-2-2-4-2:全角スペース', 1, ' ', false],
  ['Level 2-2-2-4-2:全角スペース', 1, ' ', false],
  ['Level 2-2-2-4-2:全角スペース', ' ', ' ', false],
  ['Level 2-2-2-5  :空文字列', 1, '', false],
  ['Level 2-2-2-5  :空文字列', '', 1, false],
  ['Level 2-2-2-5  :空文字列', '', '', false],
  ['Level 2-2-3-1  :記号', '\b', '', false],
  ['Level 2-2-3-1  :記号','\t', '', false],
  ['Level 2-2-3-1  :記号', '\v', '', false],
  ['Level 2-2-3-1  :記号', '\n', '', false],
  ['Level 2-2-3-1  :記号', '\r', '', false],
  ['Level 2-2-3-1  :記号', '\f', '', false],
  ['Level 2-2-3-1  :記号', '\'', '', false],
  ['Level 2-2-3-1  :記号', '\"', '', false],
  ['Level 2-2-3-1  :記号', '\`', '', false],
  ['Level 2-2-3-1  :記号', '\\', '', false],
  ['Level 2-2-3-1  :記号', '\0', '', false],
  ['Level 2-2-3-2  :number', "number", "number", false],
  ['Level 2-2-3-3  :null', null, 1, false],
  ['Level 2-2-3-3  :null', 1, null, false],
  ['Level 2-2-3-3  :null', null, null, false],
];

describe('テスト', () => {
  paramAll.forEach(param =>
    {
      describe(param[0], () => {
        test(`adds ${param[1]} + ${param[2]} to equal ${param[3]}`, () => {});
      });
      afterEach(() => {
        expect(sum(param[1], param[2])).toBe(param[3]);
      });
    }
  );
});