Макет объекта не повторяется - PullRequest
0 голосов
/ 13 декабря 2018

В настоящее время я пытаюсь (и не могу) выполнить модульные тесты в моем простом приложении, которое отправляет данные в базу данных MySQL.Ниже приведен модульный тест, который я пытаюсь запустить, но не уверен, удастся ли это накануне успешно проверить мой код, но при этом возникает ошибка TypeError: 'Mock' не повторяется

Unit_Test.py

from unittest import mock
from unittest.mock import patch, MagicMock
from unittest.mock import Mock


from source.src.scores import *


@mock.patch('source.src.scores.request')
def test_add_scores(self):
    columns = ["Match_ID", "Home_Score", "Away_Score"]
    values = [1, 1, 1]

    expected_score = {columns[i]: values[i] for i in range(len(columns))}

    with patch('source.src.scores.mysql.connector') as patch_connector:

        cursor = Mock()
        cursor.fetchone.return_value = values
        cursor.column_names = columns
        connect = Mock()
        connect.cursor.return_value = cursor

        patch_connector.connect.return_value = connect

        with patch('source.src.scores.jsonify') as json:
            json.return_value = expected_score

            json_return, http_code = add_score()

        assert patch_connector.connect.called
        assert connect.cursor.called
        assert connect.commit.called
        assert cursor.fetchone.called
        self.assertEqual(cursor.execute.call_count, 2)
        self.assertDictEqual(expected_score, json_return)


if __name__ == '__main__':
test_add_scores()

scores.py

 def execute_query(cursor, qry):
print("Executing query...")
cursor.execute(qry)


def execute_query_json(cursor, qry, cnx):
print("Executing JSON query...")
cursor.execute(qry, (request.json['Match_ID'],
                     request.json['Home_Score'],
                     request.json['Away_Score'],
                     )
               )
cnx.commit()


def add_score():
cnx = conn_db()
cursor = cnx.cursor()
print("Updating score")

execute_query_json(cursor, "INSERT INTO scores (Match_ID, Home_Score, Away_Score) VALUES (%s,%s,%s)", cnx)
execute_query(cursor, "SELECT * FROM scores WHERE Score_ID=" + str(cursor.lastrowid))
recs = extract_records(cursor)

return jsonify({'discipline':recs}), 201

Любая помощь очень ценится

1 Ответ

0 голосов
/ 13 декабря 2018

Когда вы создаете макет, вам иногда приходится сообщать ему, как реагировать на некоторые вызовы, которые от него ожидаются.Возьмем, к примеру:

class A(object):
  def __init__(self):
    self.items = []

Если вы создадите макет для использования вместо экземпляра A, макет не будет автоматически знать, как реагировать, если вы попытаетесь запросить .items.Вы можете преодолеть это, указав Mock, что возвращать для определенного свойства, передав его в качестве ключевого слова в конструктор, например так:

mocked_a = Mock(items = [])

Теперь, когда вы вызываете mock_a.items, вы получитепустой список, поэтому итерация не будет ошибкой.

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