Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246

TDD: а ведь я не знаю типов возвращаемых функциями/методами данных

10.04.2016, 13:58. Показов 1874. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читаю книгу Test-Driven Development with Python by Harry Percival. Она на примере использования фреймворка Django.

Там все построено примерно вот в таком ключе: а давайте напишем вот такой тест.

Python
1
2
3
4
5
6
7
8
from django.template.loader import render_to_string
[...]
 
    def test_home_page_returns_correct_html(self):
        request = HttpRequest()
        response = home_page(request)
        expected_html = render_to_string('home.html')
        self.assertEqual(response.content.decode(), expected_html)
И потом объясняется, а вот, этот объект у нас такого типа, поэтому нам придется применить тут decode().

Вот давайте представим, что мы видим все эти объекты в первый раз. Это модель. И для меня - лично - она очень реальна. Ибо я постоянно сталкиваюсь с незнакомыми объектами.

Вот откуда я должен знать, что у объекта response есть свойство content? Какого оно типа? При программировании я обычно ставлю точку останова и смотрю, что прилетело. И от этого пляшу. Я и тут - в тесте - могу поставить точку останова и посмотреть, что прилетело. А по-другому я не могу. Теоретически можно рыть документацию. Но это не всегда помогает и насколько это трудоемко. Можно рыть код фреймворка - но тоже спорный момент. Точка останова гораздо быстрее дает возможность сориентироваться на местности.

Я никогда не видел TDD в реальной жизни. Все знакомые программисты не то что TDD, они и просто тесты-то не пишут.
По телевизору смотришь: мужик выступает и говорит, а я, говорит, не пользуюсь отладчиком. А зачем, говорит, у меня все в тестах.

Да, это что же такое. Либо это позерство, либо он пишет совсем простые вещи (что маловероятно в современных условиях).

Вы мне скажите, правильно ли я понимаю, что надо к тестам относиться попроще? Т.е. привык ставить точку останова и смотреть, что прилетело, так и делай при написании тестов. А если не можешь написать тест наперед, извините, придется в данном конкретном случае отказаться от TDD, написать продуктивный код и потом покрыть его тестами.

Был бы рад услышать ваше мнение на этот счет.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2016, 13:58
Ответы с готовыми решениями:

Замена структуры с функциями на класс с методами
Заменить код приведенный ниже на соответствующие объявление класса golf. Замените функцию setgolf(golf & g, const char*name, int hc);...

Увеличить размер возвращаемых данных
Пишу запрос на сайте: SELECT * FROM table все зависает..... Дело в том, что в тадлице много полей (около 40ка штук) и в...

Неизвестный тип возвращаемых данных
Здравствуйте. У меня такой вопрос - предположим я пишу функцию, которая рассчитывает какую-то математическую формулу и я заранее не знаю...

31
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
13.04.2016, 12:27  [ТС]
Студворк — интернет-сервис помощи студентам
Я вижу рацоинальное зерно. Но не согласен про невозможность использования тестов. Вот книжку прохожу по тестированию - ничего пока про SOLID не нашел. Я пока не вижу связи.

Я всецело за культуру программирования. Но надо постепенно. Я пока изучил фреймворк до какого-то уровня. сейчас добью книжку по тестам, и все: на боевой проект. А солидом можно попозже заняться, я думаю.

А пока из культуры программирования в голове только:
1) Разбивать на логические кусочки, т.е. не городить огромных кусков кода. Если что-то огромное, значит, надо раздробить.
2) Классы имеют специализацию. Универсальных классов не надо.
3) DRY, и не хардкодить.
4) Стараться придерживаться конвенции по стилю программирования. Сюда же входит именование.
5) По возможности применять паттерны.
6) Ну, а дальше что-то из клиент-серверного. Как можно меньше запросов к серверу. Лучше за запросить за раз побольше, чем два раза запрашивать. Запрос медленый. И как можно меньше запросов к БД, ибо это самое медленное звено.

SOLID - ну, я бы попробовал. Но нужна нормальная книжка с упражнениями и примерами. И на подходящем ЯП.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,047
13.04.2016, 12:36
Kifsif, ты уже на верном пути. Конкретных упражнений по SOLID ты не найдёшь, ибо это просто набор принципов, которых следует придерживаться.

Пункт №2 - один из принципов SOLID. Вот нарыл более вменяемое разъяснение. Оно с примера на C#, но, думаю, тебе будет понятно.
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
13.04.2016, 12:43  [ТС]
SOLID пока не впечатляет что-то.

А вот с TDD у меня проблема такая. Если есть заготовки, то я их что же выбросить должен? Ну, надо же пилить от зародыша самого и покрывать все тестами. Хорошо если библиотечка у тебя уже готова, и можно ее просто подключить.

А так-то кирпичики - обычная практика. Сохраняешь хорошие примеры себе для будущего использования. Это что же отказаться? Странно.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,047
13.04.2016, 12:46
Ничего не понял. Что и зачем нужно выкидывать?
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
13.04.2016, 12:53  [ТС]
Есть готовые кусочки кода. Которые ты хозяйственно для себя сохранил. Ну, они где-то есть: либо ты знаешь, как их из готового проекта достать, либо просто в текстовом файлике они лежат. Либо ты их нашел на крутом сайте. В общем, готовый небольшой блочок кода для выполнения конкретной задачи.

Так вот, по TDD ты так делать не должен. Т.е. нельзя взять и вставить сразу кусок. Надо написать одну строчку, добиться предсказуемого падения теста, Потом дописать одно слово и ждать другого предсказуемого падения. И т.п. А вот взять и кусок вставить, даже если он тебе нравится - это противоречит принципам TDD.

И как-то от кирпичиков отказываться не хочется.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,047
13.04.2016, 13:01
Kifsif, это именно то, от чего я тебя пытался предостеречь - тупой формализм вместо того, чтобы взять и сделать, возникают какие-то надуманные проблемы.

Такая последовательно действий TDD диктуется только для одной цели - заставить тебя написать тестопригодный код (если ты код ещё не написан).

Если код уже есть, то у тебя три варианта:
1) Не греть голову и использовать то, что уже есть (предпочтительно);
2) Переделать этот код, чтобы он стал тестопригодным;
3) Переделать этот код, чтобы он стал тестопригодным и покрыть его тестами;
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
13.04.2016, 13:03  [ТС]
У меня пока нет опыта. Я бы сказал, что третий вариант предпочтительнее.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,047
13.04.2016, 13:11
В любом случае ничего выкидывать не нужно)
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
13.04.2016, 17:42
Цитата Сообщение от Usaga Посмотреть сообщение
Но вот по поводу TDD я придерживаюсь мнения, что это - фанатизм и гипертрофированние хорошей иди. TDD заставляет тебя писать тестопригодный код, просто обязывает это делать. В этом его задумка. И это хорошо. Но тестопригодный код можно писать и без TDD, обкладывая тестами свой код позже и не абсолютно весь, а только тот, который ты хочешь. Это более реальный сценарий. Ибо программы не ради тестов пишутся и тратить время на тестирования всего и вся просто потому, что это "правильно" - глупо.
Ты однако не понимаешь, в чем реальный смысл TDD.

Цитата Сообщение от Usaga Посмотреть сообщение
если ты делаешь мелкую/простую программу или дико торопишь, то нет смысла тратить время на тесты
И на SOLID тоже нет смысла тратить. И вообще ни на что. Быдлокодишь как бог, не счастье ли?

Цитата Сообщение от Kifsif Посмотреть сообщение
И не факт, что еще применять будешь.
Это вообще фундамент. Если мы говорим об ООП, а не о функциональной парадигме.

Цитата Сообщение от Kifsif Посмотреть сообщение
Так вот, по TDD ты так делать не должен. Т.е. нельзя взять и вставить сразу кусок. Надо написать одну строчку, добиться предсказуемого падения теста, Потом дописать одно слово и ждать другого предсказуемого падения. И т.п. А вот взять и кусок вставить, даже если он тебе нравится - это противоречит принципам TDD.
Чтобы не было таких вопросов, нужно понять философию. А не просто следовать заповеди "тест-падение-рефакторинг".
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
13.04.2016, 18:12  [ТС]
Цитата Сообщение от ct0r Посмотреть сообщение
Чтобы не было таких вопросов, нужно понять философию. А не просто следовать заповеди "тест-падение-рефакторинг".
Слушай, ну, расскажи, как ты видишь. У тебя, допустим, новый клиент. Которому нужно почти то же самое, что предыдущему клиенту. По идее, можно допилить старый проект. Пусть старый проект хорошо покрыт тестами.

Как ты возьмешься за новый проект? С нуля или все-таки будешь допиливать имеющийся код?
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
13.04.2016, 18:27
Цитата Сообщение от Kifsif Посмотреть сообщение
Как ты возьмешься за новый проект? С нуля или все-таки будешь допиливать имеющийся код?
Допиливать естественно. Какой смысл его делать с нуля? И причем тут это?
0
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
13.04.2016, 18:29  [ТС]
Спасибо. В общем, опыт нужен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2016, 18:29

Внутреннее представление типов данных VB6.0. Эквиваленты типов данных VB в C++
Добрый день. Интересует такой вопрос. Где можно почитать, посмотреть научные данные по внутреннему представлению данных в VB. Например, мне...

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

Функция с разным типом возвращаемых данных
Всем доброго времени суток! Нужно сделать некую библиотеку.В одной части библиотеки есть 3 разные структуры,возможно в дальнейшем их...

Изменить точность данных возвращаемых хранимой процедурой
Ребят помогите изменить точность в хранимой процедуре. Выводит 6 цифр после запятой. Изначально при создании базы данных не указывал...

Почему разный тип возвращаемых данных при использовании await?
Привет! Есть такой класс: class TaskTests { public Task<int> GetIntAsync(int divider) { return Task.Run<int>(()...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru