0Pricing
Lua Academy · Урок

Зачем нужны тесты

Находите ошибки до того, как их обнаружат пользователи.

«Зачем нужны тесты» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Зачем вообще нужны тесты

Автоматические тесты — это код, который проверяет Ваш код. Вместо того чтобы вручную запускать программу и визуально проверять вывод, Вы пишете небольшие проверки, которые средство запуска тестов выполняет за Вас.

Для Lua самым популярным фреймворком является busted. Он предоставляет понятный синтаксис для описания поведения и сообщает, пройден тест или нет.

Цена отсутствия тестов

Без тестов каждое изменение становится азартной игрой. Исправив одну ошибку, Вы можете незаметно сломать другую. По мере роста кодовой базы тщательно проверять всё вручную становится невозможно.

Тесты служат страховочной сеткой. После рефакторинга успешный набор тестов подтверждает, что поведение сохранилось.

Первый файл тестов

Файл тестов busted обычно находится в папке spec/ и заканчивается на _spec.lua. В нём Вы описываете, что тестируете.

Вот самый маленький полезный пример. Он проверяет работу простой арифметики.

describe("math", function()
  it("adds numbers", function()
    assert.are.equal(4, 2 + 2)
  end)
end)

Запуск busted

Установите busted с помощью LuaRocks: luarocks install busted. Затем запустите команду busted в корневой папке проекта.

Она находит файлы, заканчивающиеся на _spec.lua, запускает каждый блок it и выводит точку для каждого успешного теста и F для каждой ошибки.

Тестирование собственного модуля

В настоящих тестах тестируемый модуль импортируется с помощью require. Вы вызываете его функции и проверяете результат.

Предположим, у Вас есть модуль calculator.lua, возвращающий таблицу функций.

local calc = require("calculator")

describe("calculator", function()
  it("multiplies", function()
    assert.are.equal(6, calc.mul(2, 3))
  end)
end)

Тесты как документация

Грамотно написанные тесты одновременно служат актуальной документацией. Новый разработчик может прочитать файл спецификации и точно понять, как должна работать функция.

Поскольку описания являются обычными строками, они читаются почти как предложения: «калькулятор умножает».

describe("string utils", function()
  it("trims whitespace", function()
    assert.are.equal("hi", utils.trim("  hi  "))
  end)
end)

Быстрые циклы обратной связи

Настоящая сила тестов — в скорости. Запуск полного набора занимает секунды, что намного быстрее ручного перехода по приложению.

Можно даже запускать busted в режиме наблюдения или выбирать один файл, чтобы получать быструю обратную связь во время разработки.

-- run only one file
-- busted spec/calculator_spec.lua

Обнаружение регрессий

Регрессия — это ошибка, которая снова появляется в коде, ранее работавшем правильно. Обнаружив ошибку, лучше всего сначала написать тест, воспроизводящий её.

Когда тест завершится с ошибкой, исправляйте код, пока он не пройдёт. Теперь этот тест не позволит ошибке вернуться.

it("handles empty input", function()
  assert.are.equal(0, calc.sum({}))
end)

Каким должен быть хороший тест

Хорошие тесты быстры, изолированы и детерминированы. Они не должны зависеть от сети, времени или случайных значений, если только эти факторы не контролируются.

Каждый тест должен проверять одно ясное поведение. Если тест завершается с ошибкой, его название должно сообщать, что сломалось, без чтения тела теста.

Пирамида тестирования

Пирамида тестирования предполагает множество небольших модульных тестов, меньшее количество интеграционных тестов и совсем немного сквозных тестов. Модульные тесты дёшевы и быстры, поэтому отдавайте им предпочтение.

busted прежде всего предназначен для модульного тестирования, хотя его можно использовать и для интеграционных тестов.

Уверенность при внесении изменений

Главное преимущество тестирования — уверенность. С надёжным набором тестов Вы можете смело проводить рефакторинг, обновлять зависимости и быстрее выпускать изменения.

В этом курсе Вы изучите busted с нуля: структуру, проверки и тестовые двойники, такие как имитации и шпионы.

describe("feature", function()
  it("still works after refactor", function()
    assert.is_true(feature.enabled())
  end)
end)

Быстрая проверка

Проверьте, понимаете ли Вы, зачем мы пишем тесты.

Итоги

Тесты — это код, проверяющий код. busted — ведущий фреймворк Lua: он находит файлы _spec.lua и сообщает, пройден тест или нет.

Хорошие тесты быстры, изолированы и детерминированы. Они обнаруживают регрессии, служат документацией и дают уверенность в свободном изменении кода.

Часто задаваемые вопросы

Урок «Зачем нужны тесты» бесплатный?

Да — полный текст урока «Зачем нужны тесты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Зачем нужны тесты»?

Находите ошибки до того, как их обнаружат пользователи. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Зачем нужны тесты»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужны тесты
  2. Блоки describe и it
  3. Проверки утверждений
  4. Имитации и шпионы
← Назад к Lua Academy