Я хочу протестировать метод http post, этот метод вызовет некоторую услугу, но служба не сможет работать на локальной тестовой машине, поэтому я хочу издеваться над ней.python как издеваться над методом?
test.py:
@route(bp, '/count', methods=['POST'])
def count():
from module import service
...
total, ids = service(id, page, count) // total is a integer, ids is a list.
...
return {'total': total, 'ids': ids}
тест:
@mock.patch("module.service")
def test_search_user(self, mock_service):
mock_service.return_value=(1, [])
url = url_for('users.count')
params = { .... }
response = self._test_app.post_json(
url, params, headers=self.request_headers, expect_errors=True)
self.assertEqual(response.status_code, 200)
но тест всегда терпела неудачу, он попытался вызвать service
метод, но он не может работать на моей машине , Я просто хочу издеваться над этим, но не работает.
Любой может мне помочь! Заранее спасибо!
Согласно @syntonym ответ, мой тест должен писал так:
@mock.patch("test.service")
def test_search_user(self, mock_service):
mock_service.return_value=(1, [])
Значит, 'обслуживание' в вашем первом фрагменте должно быть заменено магическим моментом? Откуда берется «сервис»? [Прочитайте это о том, где исправлять] (https://docs.python.org/3/library/unittest.mock.html#where-to-patch) – syntonym
Посмотрите мое обновление. Я определил 'service' в модуле. – pangpang
исправления работают по именам, а не по фактическим классам. Поэтому, если вы хотите, чтобы 'service' в' testmodule' ссылался на макет, вам нужно исправить '@ mock.patch (" testmodule.service ")', а не 'module.service'. Для получения дополнительной информации прочтите [this] (https://docs.python.org/3/library/unittest.mock.html#where-to-patch). – syntonym