Я знаю формальные описания:
Настройка : создать ожидаемое состояние для теста.
Разрушение : Выполнить необходимую очисткуоперации.
Однако, почему это необходимо, особенно в 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 с разными формулировками, и, к сожалению, в этой теме нет записи в Википедии.