2016-06-08 2 views
0

Я хотел бы осветить on_text способ с модулем тест. Мне хочется проверить on_text с сообщением un-unicode, чтобы увидеть, что был вызван send_message.Mock Tornado class in Python

class MyTornadoClass(object): 
    @gen.coroutine 
    def on_text(self, message): 
     """ 
     User message controller 
     """ 
     id_ = message.message_id 
     chat = message.chat 
     text = message.text.strip().replace(" ", "-").replace("[()&?]", "") 
     if not self.is_ascii(text): 
      yield self.send_message(chat.id_, "Sorry, I didn't find anything according to you request. Try again!", 
            reply_to_message_id=id_) 
     else: 
      yield self.perform_search(text, id_, chat) 

Мой издевательский тест:

def test_app(self): 
    message = types.Message({'message_id': '1', 'text': 'Ў', 
          'chat': {"id": 227071993, "first_name": "Sergei", "last_name": "Rudenkov", 
             "type": "private"}, 'from': 343}) 

    zombie = bot_telegram.starter.MyTornadoClass('API_TOKEN', 'SO_WS_URL') 
    zombie.on_text(message) 
    with mock.patch.object(bot_telegram.starter.MyTornadoClass, 'send_message') as mock_zombie: 
     mock_zombie.assert_called_with(227071993, 
             """Sorry, I didn't find anything according to you request. 
             Try again!""", 
             1) 

Я получаю исключение:

Traceback (most recent call last): 
    File "/home/sergei-rudenkov/PycharmProjects/python_tasks/bot_telegram/unit_tests/telezombie_api/starter_test.py", line 21, in test_app 
    1) 
    File "/usr/local/lib/python3.5/dist-packages/mock/mock.py", line 925, in assert_called_with 
    raise AssertionError('Expected call: %s\nNot called' % (expected,)) 
AssertionError: Expected call: send_message(227071993, "Sorry, I didn't find anything according to you request.\n           Try again!", 1) 
Not called 

---------------------------------------------------------------------- 
Ran 1 test in 0.006s 

FAILED (failures=1) 

Я не знаю, что я делаю неправильно. Пожалуйста, укажите мне свою ошибку.

+0

Что такое 'is_ascii'? – dm03514

+0

просто метод, который проверяет, является ли 'текст' состоящим из символов ascii –

ответ

1

Когда вы используете patch.object() в качестве менеджера контекста, исправление применяется к отступом после инструкции with. Если переместить вызов .on_text()внутри блока, вы увидите другую AssertionError:

with mock.patch.object(bot_telegram.starter.MyTornadoClass, 'send_message') as mock_zombie:   
    zombie.on_text(message) 
    mock_zombie.assert_called_with(args) 

AssertionError: Expected call: send_message(227071993, "Sorry, I didn't find anything according to you request.\n           Try again!", 1) 
Actual call: send_message(227071993, "Sorry, I didn't find anything according to you request. Try again!", reply_to_message_id='1')