Зачем нужны настройки и разборки? - PullRequest
0 голосов
/ 22 мая 2018

Я знаю формальные описания:

Настройка : создать ожидаемое состояние для теста.
Разрушение : Выполнить необходимую очисткуоперации.

Однако, почему это необходимо, особенно в Benchmark.js?Зачем нужны разные циклы тестирования (как определено в Benchmark.js в этой статье)?Я заметил, что во всех случаях, о которых я могу подумать (и я думаю, что и во всех других случаях), вы можете просто переместить код настройки в код подготовки (код за пределами теста / теста) и, возможно,разделите код до конца вашего кода, и функциональность по сути та же самая (я также посмотрел несколько тестов jsperf.com, и, насколько я знаю, это верно и для них).

Например, вот эталонный тест, который я создал, в этой версии используются настройки и разрушения:

const bench = new Benchmark(
  'TicTacToeBenchmark',
  // The function to test
  () => {
    ticTacToe.addEvent(
      'turn',
      player => {
        turnText.innerHTML =
          'It\'s ' + (player['id'] === 1 ? 'X' : 'O') + '\'s turn.';
      }
    );
  },
  {
    'setup': () => {
      const players = [
        {
          char: '✕',
          className: 'playerX',
          id: 1,
        },
        {
          char: '◯',
          className: 'playerY',
          id: 2,
        },
      ];
      const ticTacToe = new TicTacToe(3, players);
    }
  }
);

bench.run();

console.log(bench); // 'mean' is 5e-7 seconds

Тот же пример, за исключением того, что все необходимое для теста объявляется с остальной частью страницы:

const players = [
  {
    char: '✕',
    className: 'playerX',
    id: 1,
  },
  {
    char: '◯',
    className: 'playerY',
    id: 2,
  },
];
const ticTacToe = new TicTacToe(3, players);

const bench = new Benchmark(
  'TicTacToeBenchmark',
  // The function to test
  () => {
    ticTacToe.addEvent(
      'turn',
      player => {
        turnText.innerHTML =
          'It\'s ' + (player['id'] === 1 ? 'X' : 'O') + '\'s turn.';
      }
    );
  }
);

bench.run();

console.log(bench); // 'mean' is 7e-7 seconds

Может, разница более заметна в модульном тестировании?Я не знаю.Не могли бы вы привести несколько случаев, когда это было бы иначе?Или объясните, почему тесты должны выполняться внутри итераций, которые выполняются внутри циклов (по сути, как 2 цикла, циклы являются внешними)?

Весь контент, который я могу найти в Интернете по этой теме, в основном повторяется.-открытие определений Setup и Teardown с разными формулировками, и, к сожалению, в этой теме нет записи в Википедии.

...