我在对以下代码块进行单元测试时遇到问题:from google.cloud import bigqueryfrom google.oauth2 import service_accountdef run_query(query, gcp_ser_acc): credentials = service_account.Credentials.from_service_account_info(gcp_ser_acc) client = bigquery.Client(gcp_ser_acc['project_id'], credentials) query_job = client.query(query) results = query_job.result() return results我是嘲笑的新手,我尝试了以下测试:def test_run_a_query_with_real_key(self): gcp_ser_acc = { 'project_id': 'my_project_id', 'private_key': 'my_private_key', 'token_uri': 'my_token_uri', 'client_email': 'my_client_email' } with mock.patch('service_account.Credentials', call_args=gcp_ser_acc, return_value={}): with mock.patch('bigquery.Client', call_args=(gcp_ser_acc['project_id'], {}), return_value={}): run_query('SELECT 1+1 as col', gcp_ser_acc) assert service_account.Credentials.called assert bigquery.Client.called任何人都可以嘲笑谷歌的东西并编写单元测试吗?
2 回答

红颜莎娜
TA贡献1842条经验 获得超12个赞
虽然可以改进这里的模拟,但作为测试,它不会为您提供太多价值。在您的代码中,您可以测试两个基本内容:
您是否传递了正确的凭据等以正确使用 BigQuery。
您的应用程序围绕查询和结果处理的业务逻辑是否正确。
对于 (1),没有任何单元测试可以让您真正放心,您的代码可以在 GCP 上运行。它会做的就是表明它做了你的测试检查的事情。而不是单元测试,考虑某种集成或系统测试,实际对 GCP 进行真正的调用(但不要像单元测试那样经常运行它)
单元测试非常适合 (2),但是您目前的功能实际上并没有做任何事情。如果你这样做了——比如说一些为每个结果行实例化一个对象的代码——那么我们可以对其进行单元测试。
添加回答
举报
0/150
提交
取消