Вот вы программируете, пишете код, функции и все такое. Вы хотите, чтобы все это работало, конечно, поэтому проверяете все ли в порядке с кодом, нет ли в нем ошибок и он делает то, для чего вы его писали. Вы не слишком беспокоитесь о синтаксических ошибках или ошибках типизации, поскольку вы обнаруживаете их сразу же, как только запускаете свои программы.
Но есть один тип подлых ошибок, с которыми все сложнее, и компьютеры не умеют находить их без нашей помощи. Это логические ошибки.
Предположим, вы написали функцию
square. Она принимает число и возвращает его квадрат. Даете ей 2, она должна вернуть 4. Даете 6 — она должна вернуть 36.
Если вы сделали ошибку, и эта функция возвращает неверное значение, компьютер или интерпретатор языка программирования будут не в состоянии распознать это как ошибку. Они делают только то, что вы сказали им делать, поэтому если вы укажете, что 2 в квадрате должно быть 11, правильным ответом станет 11 — вот и вся магия.
Один очевидный способ удостовериться, что ваша функция выполняет то, чего вы от нее хотите, это запустить ее и посмотреть.
Мы можем запустить
console.log(square(2)); и если она выведет 4, то все в порядке. Ну, может быть в порядке не совсем
все… чтобы не сомневаться, давайте проверим
square(6). Результат -- 36, значит все в порядке. Ну, еще одну, ладно: 100 в квадрате. Десять тысяч — хорошо.
На данном этапе вы уже можете быть достаточно уверенными, что функция
square действительно возводит величину в квадрат. Эта функция простая и вам не нужно сидеть часами и тестировать ее. Но не все ваши функции такие же простые. Даже функция факториала из одного из предыдущих уроков намного-намного сложнее.
Да, и знаете что еще? 2-х, 4-х и 100-а не достаточно. Вам еще нужно проверить отрицательные числа, верно? -2 возведенное в квадрат должно быть 4, а не -4, а мы этого не проверили. О… а 0 в квадрате. А, подождите! Еще кое что: мы должны проверить, что эта квадратная функция не сломается, если вы передадите в нее что-то совсем не то, например строчку. Она должна, вероятно, вернуть, что "собака" в квадрате — это не число.
Писать все эти штуки и выводить на экран вручную как-то странно, особенно учитывая то, что у нас есть эта мегамощная машина, которая делает все, что мы прикажем. Так что, давайте прикажем ей тестировать для нас функции. Мы знаем, что эти функции ДОЛЖНЫ возвращать. Поэтому компьютер может проверить, действительно ли они возвращают то, что надо.
Представьте себе функцию
assert, которая работает с тремя элементами:
- функцией, которую мы хотим протестировать
- аргументом, который принимается этой функцией
- значением, которое мы СЧИТАЕМ должна вернуть эта функция
assert скажет нам, действительно ли функция возвращает значение, которое мы ожидаем.
Давайте вызовем
assert, чтобы увидеть, действительно ли функция
square возвращает 4, когда вызывается с аргументом 2: