MST

星途 面试题库

面试题:Python单元测试中Mock的深入应用

在一个Python项目中,有一个函数依赖于外部API获取数据并进行处理。由于API调用可能不稳定且耗时,在单元测试时需要使用Mock来模拟API的响应。请使用unittest.mock模块,编写代码来模拟API调用,并对依赖该API的函数进行单元测试,要求展示如何模拟不同的API响应情况以覆盖多种测试场景。
13.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import unittest
from unittest.mock import patch
import your_module  # 导入包含依赖API函数的模块

# 假设这是依赖API的函数
def your_function_that_calls_api():
    # 这里是实际调用API的代码,现在先省略
    pass

class TestYourFunction(unittest.TestCase):

    @patch('your_module.your_function_that_calls_api')
    def test_api_success(self, mock_api_call):
        mock_response = {'key': 'value'}
        mock_api_call.return_value = mock_response
        result = your_function_that_calls_api()
        self.assertEqual(result, mock_response)

    @patch('your_module.your_function_that_calls_api')
    def test_api_failure(self, mock_api_call):
        mock_api_call.side_effect = Exception('API call failed')
        with self.assertRaises(Exception):
            your_function_that_calls_api()


if __name__ == '__main__':
    unittest.main()

上述代码解释:

  1. 导入必要的模块,unittest 用于编写单元测试,patch 用于创建模拟对象。
  2. 假设 your_function_that_calls_api 是依赖API的函数,由于实际代码中调用API部分省略,这里只做占位。
  3. TestYourFunction 类继承自 unittest.TestCase,用于编写测试用例。
  4. test_api_success 测试用例中,使用 patch 模拟 your_function_that_calls_api 函数,并设置返回值为一个模拟的成功响应,然后断言函数返回值与模拟响应一致。
  5. test_api_failure 测试用例中,使用 side_effect 设置模拟函数抛出异常,模拟API调用失败的情况,使用 assertRaises 断言函数调用会抛出异常。