Как можно смоделировать эту переменную веб-сокета в методе класса для тестирования сервера Python - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь смоделировать переменную websocket в моем классе.

Я пробовал это, а также многие другие способы попытки фиктивного исправления переменной websocket, но я никогда не видел, чтобы какие-либо фиктивные вызовы проходили. Я бы просто утверждал это с клиентом, но я хочу научиться тестировать с помощью насмешек.

class ServerTest(unittest.TestCase):
    @mock.patch('websockets.server.WebSocketServerProtocol')
    def test_add_user(self, mocked_socket):
        mocked_socket.recv.return_value = "some string"
        expected = "return string"
        print(mocked_socket.mock_calls)
        mocked_socket.send.assert_called_with(expected)

if __name__ == '__main__':
    unittest.main()

Я пытался разработать фиктивный тест для моего сервера Python, и мне очень трудно пытаться смоделировать переменную websocket в этом классе

import asyncio
import websockets
import json

import db_flask


class JsonWrapper:
    def __init__(self, data):
        self.data = data

    def get(self, key):
        if(key in self.data):
            return(self.data[key])


class Server:
    async def handle(websocket, path):
        data = await websocket.recv()
        print(f"data received: {data}")

        data = json.loads(data)
        action = data["Message"]
        if(action == "!join"):
            username = db_flask.new_user(JsonWrapper(data))
            data_to_send = db_flask.get_user_by_username(username)

        print(f"sending data:{data_to_send}")
        await websocket.send(json.dumps(data_to_send))


def run_server():
    db_flask.create_database()
    s = Server()
    start_server = websockets.serve(s.handle, "localhost", 5555)
    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()  # // disable this when testing?


if __name__ == '__main__':
    run_server()

Я хочусделать что-то вроде websocket.recv.return_value = "some string"

python3 test1.py
[]
F
======================================================================
FAIL: test_add_user (__main__.ServerTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/mock/mock.py", line 1330, in patched
    return func(*args, **keywargs)
  File "test1.py", line 17, in test_add_user
    mocked_socket.send.assert_called_with(expected)
  File "/usr/local/lib/python3.6/dist-packages/mock/mock.py", line 932, in assert_called_with
    raise AssertionError(error_message)
AssertionError: expected call not found.
Expected: send("return string")
Actual: not called.
...