Git, Git Flow, TDD #3 - Введение в TDD и тестирование в Python
HTML-код
- Опубликовано: 30 сен 2024
- Мои курсы:
Boosty:
boosty.to/omol...
Patreon:
/ karty-vsekh-41011404
Разработка через тестирование (TDD) - зачем нужно писать тесты, зачем писать тесты до основного кода. Небольшой пример написания функции в стиле TDD. Используется фреймворк Unittest на Python 3.
Разработка через написание тестов (TDD) проходит через три стадии:
Red, Green, Refactoring
RED. Написали тест к функционалу, которого еще нет. Запустили - он провалился.
GREEN. Написали целевую (тестируемую) функцию. Задача на этом этапе сделать так, чтобы функция проходила тест. После того, как функция (или класс) - unit'ы, пройдут тест, переходим к следующему этапу.
REFACTORING. Нужно привести функцию в порядок, сделать более универсальной, упростить если нужно и т.п. Словом, рефакторинг. Запустили тесты - проходят? Делаем комит. Если нет - правим баги, благо с тестами это делать проще.
Это третья часть из трех, посвященных этой теме.
1. Основы Git - что такое Git, принцип его работы, создание репозитория, добавление файлов, создание комитов, залив проекта на github (push)
2. Git Flow - принципиальная схема при работе с ветками с ветками Git. Как создавать ветки, переключаться между ними, сливать ветки. Merge, rebase.
3. Введение в TDD - строго говоря, TDD не относится к работе с Git'ом, но, тем не менее, больше нет TDD без Git'а или любой другой системы контроля версий исходного кода.
** ИСХОДНЫЙ КОД **
Основных проектов доступен в Patreon:
/ iskhodnyi-kod-26640469
***
------
Все видео серии:
Git, Git Flow, TDD #1 - Что нужно знать о работе с Git
• Git, Git Flow, TDD #1 ...
Git, Git Flow, TDD #2 - Git Flow: Основы работы с ветками в Git
• Git, Git Flow, TDD #2 ...
Git, Git Flow, TDD #3 - Введение в TDD и тестирование в Python
• Git, Git Flow, TDD #3 ...
Обязательно подпишитесь на канал!
------
🔷 Для донатов. Всегда очень признателен за это:
www.donational...
Отличные видео, спасибо. Сможете еще по Докеру сделать?
Спасибо. Да, как-нибудь дойдем и до Докера
Отличное видео. Спасибо! Был бы благодарен, если бы бы развернутая серия по тестам.
Как всегда на высоте!
Олег, я вот тут книжечку купил занимательную "Python Разработка на основе тестирования" Гарри Персиваль. Но не все получается, а спросить не у кого...
Было бы круто, если бы ты со своим талантом преподавателя сделал бы курс по TDD на ее основе. Я бы купил не парясь тысяч за 5-7. А если бы курсы открыл с выдачей видеоматериалов, домашек и консультациями по скайпу, например - думаю, что легко бы набрал группу желающих и там уже около 15000 мог бы собирать. Запиши ролик-опросник - полагаю моя просьба найдет поддержку. Заодно и цену предложенную исследуешь. По TDD лично я ничего не нашел из наших инфобизнесменов.
Если бы еще проджакт менеджеры понимали всю необходимость тестирования, а то "это же трата времени"
я думаю их место на кассе в магните, если уж нет нужной квалификации
Не могу понять, как это работает, ведь os.getcwd() вернёт абсолютный путь к директории tests. По логике вещей тут должно быть что-то типа sys.path.append(os.path.dirname(os.getcwd()))
Думаю это потому, что Олег вызывает тесты из корневой папки проекта.
возможно, у автора при запуске через atom настроено автоматическое добавление в PYTHONPATH рут директории. Например, у меня в Pycharm так настроено.
Если запускать через консоль, то да - там нужно делать как указанно у вас через os.path.dirname
видосы олега нравятся, но честно, по тестам очень слабо
видео про GIT - да
видео про TDD - да
Вот тебе тест кейс, подумай где он упадет)
Что то не догнал почему это в гит флоу
у меня не импортировалось как у автора:
import sys
sys.path.append('../')
этот код решил проблему, и только один модуль пришлось импортировать.
Спасибо, помогло
Ащще отлично, спасибо, Олег!
Спасибо, рад, что вам нравится
Короче, Склифосовский
Спасибо, хорошее видео.
Рад, что вам нравится
Добавлю взгляд на TDD с другой стороны баррикад: ruclips.net/video/sLWURdgEcrI/видео.html
Очень крутые видео! Было бы здорово увидеть аналогичную серию по хукам.
Спасибо за уроки. Но есть вопросы, не показано, каким образом осуществлять "откат" на предыдущие версии. Например, и как при слиянии отказаться от каких то изменений.
Спасибо большое за внятный материал! Хоть сам и прогаю на C#, было очень интересно и главное, понятно.
Спасибо за видео. Очень жду серию про тестирование и серию про докер.
Очень интересно было бы посмотреть еще про тестирование , особенно на pytest
О господи, единственное понятное видео о тестах на ютубе! Спасибо!
За капокопполу отдельный лайк!
у меня эта конструкция не работала
sys.path.append(os.getcwd())
from main import *
сработала
from testing.main import *
Дело, вероятно, в том, из какой директории запускался код. При запуске из testing нормально всё отработало.
Спасибо, успехов в ваших начинаниях.
Полезное видео. Хотелось бы добавить, что, наверное, не следует возвращать ноль если на вход пришла строка. С одной стороны, конечно, функция получилась бронебойная, а с другой стороны получился JS)
Просто пример.
в JS не пустая строка возвращает 1, а пустая 0.
можете как нибудь убрать звуки нажатие клавиш клавиатуры?
И еще почему не юзаете автодополнение даже в баше
автодополнение в терминале я использую и это не bash.
Звуки клавы убрать не могу и, честно говоря, не вижу в этом никакого практического смысла.
@@zaemiel наоборот со звуком клавиатуры лучше, интуитивно ощущается в какой части экрана идет печатание.
так что не слушайте никого, продолжайте в таком же духе.
return int(m / 100)
Что это и к чему это?
рефакторинг
нет, это не рефакторинг.
Чтобы ответить на вопрос почему это не рефакторинг, вам придется ответить на вопрос зачем это нужно.
И назвать как минимум 3 причины почему этого нельзя делать.
не вижу проблемы сократить дробь, ибо 10 * m / 1000 == m / 100
мы же не о сокращении дробей говорим. Мы говорим о рефакторинге кода.
Разве вы не видите, что 10 - это переменная?
Во всех случаях используется только одна формула, в которой меняется масса m и масса ингридиента.
Если рецепт будет другим (а он может быть другим), то разграмовка по игридиентам изменится. Более того, могут добавиться другие ингридиенты.
Если сделать так, как предлагаете вы, то потеряется смысл формулы. Из нее автоматом выпадет важный элемент. И чего вы этим добиваетесь? Поэтому я сразу спросил о целях этого сокращения.
В данном конкретном случае рефакторингом было бы объединить ВСЕ функции по расчетам разграмовки В ОДНУ функцию.
Вот и придумайте, как это сделать.
Не забудьте, кстати, вначале тесты написать.