На главную

Модульное тестирование и рефакторинг

10-04-2022

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

Код и тесты писал на F#. Понимаю, что язык экзотический и ззотерический, но именно этим он и интересен. В конце концов, тесты нужны при любой парадигме программирования. Врочем, тем, кто пишет на C#, многое будет понятно, потому что базовая платформа .NET одна и та же, и тестовые фреймворки используются одни и те же.

В воркшопе, в частности, это xUnit для модульных тестов и BenchmarkDotNet для тестов производительности.

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

Краткое содержание воркшопа: тесты нужны в том числе и для того, чтобы вносить правки в код, не опасаясь что-нибудь сломать. Пишем тесты для вычисления чисел Фибоначчи и пишем первую — медленную — реализацию. Поняв, что она медленная, пишем чуть более быструю. Используем тесты, чтобы убедиться, что не сделали ошибок.

Чтобы понять, насколько быстрым стал код, пишем тесты производительности. Наконец, пишем третью, самую быструю реализацию, опираясь на упражнение 1.19 из книги Структура и Интерпретация Компьютерных Программ, в народе известной, как SICP.

Снова используем готовые тесты, чтобы убедиться, что код написал правильно. Кроме того, переписываем реализацию, потому что хотим, чтобы тесты помогали нам писать корректный код.

Код, написанный в воркшопе, лежит здесь.