#python #python-unittest #pdb
#python #python-unittest #pdb
Вопрос:
(код: pastebin)
Почему исправление telegram.Bot
объекта экземпляра с ptbtest.Mockbot
помощью объекта экземпляра разрушается, просто установив точку останова внутри обработчика ( start_reg
) или внутри метода исправленного объекта (a telegram,Bot
) ?
context.bot
и bot
одинаковы без отладки и отличаются внутри. Из-за неудачного исправления мои тесты тоже не выполняются.
Вы можете видеть в выводе, что pdb.set_trace()
строка комментария также изменяет print
вывод.
Пожалуйста, не стесняйтесь задавать любую дополнительную информацию в комментарии.
MWE:
# # # BEGIN FILE 1 # # #
import unittest
from unittest.mock import patch
import warnings
from telegram.utils.deprecate import TelegramDeprecationWarning
from telegram.ext import Updater
from ptbtest import (ChatGenerator,
Mockbot,
UserGenerator,
CallbackQueryGenerator)
warnings.filterwarnings("ignore", category=TelegramDeprecationWarning)
bot = Mockbot()
@patch("file_2.bot", bot)
class TestConversation(unittest.TestCase): # IsolatedAsyncioTestCase - for async
def setUp(self): # name method should be exactly "setUp"
warnings.filterwarnings("ignore", category=TelegramDeprecationWarning)
self.bot = bot
self.mg = self.bot.mg
self.updater = Updater(bot=self.bot)
self.dispatcher = self.updater.dispatcher
self.dispatcher.add_handler(handler=file_2.registration)
self.chat_generator = ChatGenerator()
self.user_generator = UserGenerator()
self.cqg = CallbackQueryGenerator()
self.addCleanup(self.updater.stop)
def test_run(self):
self.updater.start_polling() # returns update_queue obj
generated_user = self.user_generator.get_user(id=177381168)
generated_chat = self.chat_generator.get_chat(type="group")
update = self.mg.get_message(user=generated_user, chat=generated_chat, text="/reg", parse_mode="HTML", id=None)
self.bot.insertUpdate(update=update)
if __name__ == '__main__':
unittest.main()
# # # END FILE 1 # # #
# # # BEGIN FILE 2 # # #
from telegram.ext import MessageHandler
from telegram.ext import ConversationHandler
from telegram.ext import Filters
from telegram.ext import Updater
from telegram import Bot
from telegram.utils.request import Request
import pdb
bot = Bot(token='',
request=Request(connect_timeout=3, read_timeout=3, con_pool_size=16))
def start_reg(update, context):
# Line breaks a code
pdb.set_trace() # Press c to continue
print(bot)
# `context.bot` and `bot` are the same without debugging and differrent within.
context.bot.send_message(chat_id=update.effective_user.id, text='123')
return -1
registration = ConversationHandler(
entry_points=[MessageHandler(filters=Filters.regex('/reg'), callback=start_reg)],
states={},
fallbacks=[],
)
if __name__ == '__main__':
updater = Updater(bot=bot)
dispatcher = updater.dispatcher
dispatcher.add_handler(handler=registration)
updater.start_polling()
updater.idle()
# # # END FILE 2 # # #
вывод: (pastebin)
(venv) david@david-ThinkPad-E480:~/PycharmProjects$ python3 /home/david/.config/JetBrains/PyCharmCE2021.3/scratches/scratch_1.py # With ptb.set_trace
Connection pool of Request object is smaller than optimal value (8)
> /home/david/.config/JetBrains/PyCharmCE2021.3/scratches/scratch_2.py(16)start_reg()
-> print(bot)
(Pdb) c
{'id': 838004799, 'username': 'Test_0101_bot', 'first_name': 'Test-0101-bot'}
.
----------------------------------------------------------------------
Ran 1 test in 3.552s
OK
sys:1: ResourceWarning: unclosed <ssl.SSLSocket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('192.168.0.100', 57416), raddr=('149.154.167.220', 443)>
(venv) david@david-ThinkPad-E480:~/PycharmProjects$ python3 /home/david/.config/JetBrains/PyCharmCE2021.3/scratches/scratch_1.py # Without ptb.set_trace
Connection pool of Request object is smaller than optimal value (8)
{'id': 0, 'username': 'MockBot', 'first_name': 'MockBot', 'last_name': 'Bot'}
.
----------------------------------------------------------------------
Ran 1 test in 2.122s
OK
(venv) david@david-ThinkPad-E480:~/PycharmProjects$