使用模拟进行Google Apps API的单元测试 - 管理目录API

2 投票
1 回答
1104 浏览
提问于 2025-04-18 01:35

我按照这个教程 这里 的步骤,终于可以用我的应用程序从我的域名中获取所有的邮件了。

现在我想为我的应用写一些单元测试,并使用模拟(mock),但我不知道从哪里开始。

我在 这里 阅读了关于使用模拟进行单元测试的内容,并且了解到谷歌的API管理目录API自带一个模拟库。但我不太明白怎么正确使用它。

我的应用程序 test_email_user.py 中引入了我真实应用程序的 email_user.py,但接下来该怎么做呢?

我需要伪造谷歌API目录对我真实应用程序的响应,但该怎么做呢?

问候,
sam

1 个回答

2

我对你提到的Google客户端API自己的模拟库不太熟悉,但我用这个模拟库很容易就能做到:

import mock

class DirectoryHelper():
...
#Real method that calls the API
def get_users(self):
    user_list = []
    request = self.service.users().list(
        customer=self.customer_id,
        maxResults=500,
        orderBy='email',
        fields="nextPageToken,users(id,orgUnitPath,primaryEmail,name(givenName,familyName),agreedToTerms,suspended)"
    )
    while request:
        logging.debug('Retrieving a page of users from directory...')
        report_document = request.execute()
        if 'users' in report_document:
            for user in report_document['users']:
                user_list.append(user)
        request = self.service.users().list_next(
            request, report_document
        )
    return user_list

#Mock method that simulate the API call
def get_mock_users(self):
    return [
   {
   "id": "12345",
   "primaryEmail": "mock@domain.com",
   "name": {
    "givenName": u"Mock",
    "familyName": u"User"
   },
   "agreedToTerms": True,
   "suspended": False,
   "orgUnitPath": "/"
  }
]

@mock.patch.object(DirectoryHelper, 'get_users', get_mock_users)
def test_sync_apps_users(self):
    directory_helper = DirectoryHelper()
    self.assertEquals(1, len(directory_helper.get_users()), 'Mock only contain one user')

撰写回答