Tishka17
ну и mypy лишним не будет, да
Oleg
ну execute - это часть стандартной либы, а get_objects надо мокать и проверять что в него пихают что надо
а get_objects надо мокать и проверять что в него пихают что надо вот с этим полностью согласен ну execute - это часть стандартной либы либы тоже могу меняться. Ну и согласись, что написание теста на get_object это 1 минута времени и 2-3 строчки кода. И отказ от написания тестов на такие функции - это экономия на спичках
Tishka17
ну хз как как мокать execute
Oleg
ну хз как как мокать execute
Мокаешь execute c autospec=True
Kseniia
Ksenia fugureskater: Есть видео лица на минуту, нужно в реальном времени рисовать 68 ключевых точек на нем. Все работает кроме того, как видео замедляется раза в два. В чем может быть ошибка? Работа с openCV ПОЖАЛУЙСТА, ОЧЕНЬ НАДО, ВСЕ ИДЕИ ПЕРЕПРОБОВАЛА🙈🙈🙈 Извините за беспокойство☺️
Anonymous
Stoopid cat
Kseniia
2,7 GHz
Oleg
ну хз как как мокать execute
Например так def test_get_object(mocker): # arrange execute_mock = mocker.patch('somemodule.execute', autospec=True) # act result = get_object(42) # assert execute_mock.assert_called_once_with('seelct x from tablename. where ?>0', (42,)) assert result == execute_mock.return_value
🤔
Stoopid cat
Ain’t nothing stupid about that cat
Kseniia
возможно просто проц не справляется?
Для обработки видео должно хватать...
Kseniia
Наверное
🤔
2,7 GHz
Ну у проца не только частота есть
Tishka17
хз что мы этим проверим
Tishka17
кроме того что константа будет в коде два раза
Oleg
ну так это фактически тестирование что константа равна себе
нет, мы в первую очередь проверяем, что execute был вызван с правильной сигнатурой и что get_object вернула результат execute
Oleg
матчить или нет сам sql это уже другой вопрос
Oleg
если константа, то я бы не стал
Tishka17
хм
Oleg
если sql - это константа, то просто выносим ее в переменную и так же мокаем, а тесте проверям что в execute передали этот мок
Oleg
чтобы не дублировать константу
Tishka17
воу-воу
Tishka17
мокать константы
Oleg
не мокаем, сорян
Oleg
просто используем в проверке эту константу
Oleg
я писал про константу, а мысли были про то, что sql может возвращаться из какой-то функции
Oleg
в общем так def test_get_object(mocker): # arrange execute_mock = mocker.patch('somemodule.execute', autospec=True) y = 42 # act result = get_object(y) # assert execute_mock.assert_called_once_with(GET_OBJECTS_QUERY, (y,)) assert result == execute_mock.return_value
Tishka17
окей, я понял идею, надо переварить
Oleg
ну разве что мок должен возвращать список туплов и ассертить надо уже разобранные значения
Зачем? Ведь get_objects ничего не делает с результами execute, а только возвращает их. Если в get_objects будет какая-то обработка результата, то да, мок должен возвращать ожидаемый результат
Tishka17
ну реально конечно же он будет не просто делать execute, а ещё создавать объект из строки
Tishka17
ведь мы же базу изолируем
Oleg
ну реально конечно же он будет не просто делать execute, а ещё создавать объект из строки
Ну если там будет какой-то маппинг, то наверняка эту будет выглядет как-то так: def get_objects(y): result = execute(...) objects = map_result(result) return objects Тогда можем просто замокать map_result и написать на него отдельный тест
Tishka17
ну да
Tishka17
map_result понятно
Nikita
Ohayou gozaimasu!
Расист, она же китаянка
Aragaer
замокать оба - из execute возвращать sentinel.execute_result, в map_result проверить, что его же передали аргументом
Aragaer
из map_result вернуть sentinel.map_result, прверить что общий результат это оно и есть
Aragaer
беда в том, что ты по сути тестом зафиксировал код - его вообще поменять после этого нельзя
Nodaa
Расист, она же китаянка
но ПисНула по Англ
Aragaer
почему китаянка, если буквы японские?
Aragaer
а, я не туда посмотрел
Oleg
беда в том, что ты по сути тестом зафиксировал код - его вообще поменять после этого нельзя
мок map_result в общем-то не обязательно делать если он используется только в get_objects, а get_objects мы везде мокаем
Aragaer
а, я думал мы get_objects тестируем
Oleg
Если map_result вызывается много где и мы не будем его мокать, то по-сути тестируя код других функций мы будем писать дублирующиеся тесты и на map_result
Oleg
а, я думал мы get_objects тестируем
Тестируем его. Но вопрос в том надо ли мокать map_result. Если мы его не мокаем, то нам надо в тесте get_objects проверять результат работы map_result
Oleg
Если map_result это непубличный интерфейс, а особенности внутренней реализации get_objects, то можно и не мокать. А если map_result может использоваться в других местах, то незамокав map_result придется везде где он используется проверять правильность его работы
Oleg
тестов будет больше, они будут сложнее, и при изменении map_result придется править больше тестов
Tishka17
(ПИТОН ФЛАГ ВКЛЮЧИТЬ ТРИ ЗАКОНА)
Vitaliy
(ПИТОН ФЛАГ ВКЛЮЧИТЬ ТРИ ЗАКОНА)
Привет! Отличная статья по typing на хабре! Спасибо!
Tishka17
да не за что
Tishka17
принимаются лайки в карму и яндекс деньги
Tishka17
написано же
Aragaer
а она отличается от тех букв, которые написаны?
Tishka17
прям даже не знаю что добавить
Anonymous
Aragaer
64
Mike
Tishka17
угу
Anonymous
Ну ок
Anonymous
Я 3 минуты думал
🍁 Jaŭhien
4, 8, 15, 16, 23, ?
Andrew
41=53 51=64
Dk
syntax error
🍁 Jaŭhien
41=53 51=64
61=75 71=86 и т.д.
🍁 Jaŭhien
42
О, красаучик
Artyom
Самый факапный сериал
17
2,6,8,14,?
🍁 Jaŭhien
Первые два сезона норм
Artyom
Первые два сезона норм
Там норм до того момента как они во времени начинают скакать и переключаться между версиями событий
Anonymous
17
22
Почему 22?
Anonymous
Почему 22?
Типа фибоначчи