Вызов: исправление / насмешка вызова метода в удаленном классе для возврата известного фрагмента данных.
У меня есть целая серия тестов, которые выглядят так:
@pytest.mark.gen_test
def test_assignment5(app):
with patch.object(BaseHandler, 'get_current_user') as mock_user:
mock_user.return_value = {"name": '1_kiz'}
with patch.object(BaseHandler, 'get_auth_state') as mock_state:
mock_state.return_value = { "course_id": "course_2",
"course_role": "Instructor",
"course_title": "A title",
}
r = yield async_requests.get(app.url + "/assignment?course_id=course_2&assignment_id=assign_a")
assert r.status_code == 200
response_data = r.json()
assert response_data["success"] == False
assert response_data["note"] == "Assignment assign_a does not exist"
(app
- основной метод для моего приложения, а get_current_user
& get_auth_state
используют информацию, выходящую за рамки приложения, чтобы получить значение, поэтому необходимо fudged )
..... повторяющиеся with
сегменты оскорбляют мое восприятие красивого кода.
Я знаю, что мог бы перевести словари возвращаемых значений в переменные верхнего уровня, и это уменьшило бы некоторый повторяющегося кода, однако я все еще повторяю вещи with patch.object
каждый раз.
Чтение https://docs.python.org/dev/library/unittest.mock.html#unittest.mock.patch Я знаю, что могу просто украсить каждый тест, однако
user_kiz = { ... }
auth_inst = { ... }
....
@pytest.mark.gen_test
@patch('BaseHandler.get_current_user', return_value = user_kiz)
@patch('BaseHandler.get_auth_state', return_value = auth_inst)
def test_assignment5a(app, kiz):
r = yield async_requests.get(app.url + "/assignment?course_id=course_2&assignment_id=assign_a")
assert r.status_code == 200
response_data = r.json()
assert response_data["success"] == False
assert response_data["note"] == "Assignment assign_a does not exist"
просто дает мне ModuleNotFoundError: No module named 'BaseHandler'
ошибку.
Есть ли в способ исправить / смоделировать вызов метода в удаленном классе, позволяя мне устанавливать словари current_user
& auth_state
для каждого вызова?
(в конечном итоге мне также нужно будет протестировать для разных пользователей и разных auth_states)