Testing 如何在flask restul资源方法中模拟函数调用

Testing 如何在flask restul资源方法中模拟函数调用,testing,flask,mocking,flask-restful,Testing,Flask,Mocking,Flask Restful,我使用Flask restful开发了一个API。我有一个API,资源名为“Server”。此资源有一个方法get来处理对“/server”url的请求。 在此方法中,我有另一个类“Connector”的调用方法,该类从另一个服务获取数据: class Server(Resource): def get(self): ... status, body = connector.get_servers(page, size) # call method of an

我使用Flask restful开发了一个API。我有一个API,资源名为“Server”。此资源有一个方法get来处理对“/server”url的请求。 在此方法中,我有另一个类“Connector”的调用方法,该类从另一个服务获取数据:

 class Server(Resource):
    def get(self):
     ...
        status, body = connector.get_servers(page, size) # call method of another class
     ...
    return body, status
我想测试开发的API。我写了一些测试:

from application import create_app
from unittest import TestCase

class TestServerResource(TestCase):

def setUp(self):
    self.app = create_app()
    self.client = self.app.test_client

def test_bad_url(self):
    res = self.client().get('/server')
    self.assertEqual(res.status_code, 400)

# Test of get method Server resources described above
def test_pagination(self):
    res = self.client().get('/server?page=1&size=1') # request to my API
    self.assertEqual(res.status_code, 200)
在方法“test_pagination”中,我正在测试我的资源的方法“get”,但另一个类的方法的调用在此方法中。因此,我有一个问题:如何在测试中模拟调用“connector.get_servers()”

谢谢。

我找到了解决办法。 要在其他方法中模拟方法调用,我们可以从unittest.mock使用“补丁”装饰器

例如,下面描述的示例将以以下方式显示:

from unittest.mock import patch

# Test of get method Server resources described above
@patch('path_to_method_we_want_to_mock.method')
def test_pagination(self, mock):
   mock.return_value = <new value> # set value which mocked method return
   res = self.client().get('/server?page=1&size=1') # request to my API
   self.assertEqual(res.status_code, 200)
@patch('application.servers_connector.ServersConnector.get_server_by_id')
@patch('application.rent_connector.RentConnector.get_rents_for_user')
def test_rent_for_user(self, rent_mock, server_mock):
     ...