Как макетировать / перехватывать внешние вызовы API во время модульного (api) тестирования? - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно написать пример модульного теста для моего сервера Django, где у меня есть такая структура, как следующий фрагмент кода.Это просто псевдокод, потому что я просто хочу получить представление о подходе.

# views.py
class UserView(ViewSet):

    def get_info_from_multiple_sources(self, request):
        # assume url for this action is /users/:id/info
        user_id = get_parameters(request)
        info = info_service.get_info(user_id)
        return Response(info)

# user_info_service.py
class UserInfoService:

    def get_info(user_id):
        user_fb_info = fb_service.get_user_info(user_id)
        user_twitter_info = twitter_service.get_user_info(user_id)
        merged_info = merge_info(user_fb_info, user_twitter_info)
        return merged_info

# fb_service.py
class FbService:

    def _manipulate_data(response):
        user_info = None
        # do some processing here, to convert data from fb format to 
        # project format. Assign formatted response to user_info variable.
        return user_info

    def get_user_info(user_id):
        # lets say this imaginary urls gives user info somehow magically.
        response = requests.request('http://fb.com/users/{0}'.format(user_id))
        return self._manipulate_data(response)

# twitter_Service.py
class TwitterService:

    def _manipulate_data(response):
        user_info = None
        # do some processing here, to convert data from twitter format to 
        # project format. Assign formatted response to user_info variable.
        return user_info

    def get_user_info(user_id):
        response  = requests.request('http://twitter.com/users/{0}'.format(user_id))
        return self._manipulate_data(response)

# test_user_info_endpoint.py
class TestUserInfoViewEndpoint(APITestCase):

    def test_user_info(self):
        # how to write a unit test function where
        # I will be mocking only requests.request call. i.e outgoing call to external APIs

Я использую unittests framework и я открыт для использования любой стандартной библиотеки для него.

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