L T*_*son 5 python unit-testing
我目前正在尝试(但失败了)在我的简单应用程序上执行单元测试,该应用程序将数据发布到 MySQL 数据库。下面是我尝试运行的单元测试,不确定这是否能成功测试我的代码,但会出现 TypeError: 'Mock' object is not iterable
单元测试.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()
Run Code Online (Sandbox Code Playgroud)
分数.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
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助
g.d*_*d.c 10
当您创建模拟时,有时必须让它知道如何响应一些预期的调用。举个例子:
class A(object):
def __init__(self):
self.items = []
Run Code Online (Sandbox Code Playgroud)
如果您要创建一个 Mock 来代替 的实例A,则当您尝试请求时,该模拟将不会自动知道如何响应.items。您可以通过将特定属性作为关键字传递给构造函数来告诉 Mock 返回什么来克服这个问题,如下所示:
mocked_a = Mock(items = [])
Run Code Online (Sandbox Code Playgroud)
现在,当您调用时,mock_a.items您将得到一个空列表,因此迭代不会出错。
| 归档时间: |
|
| 查看次数: |
26658 次 |
| 最近记录: |